列表在函数式编程中占据着重要的位置。在Lisp语言中,一切皆是列表,就连函数也是列表,列表在Lisp语言中发挥到了极致。F#语言列表语法来源于Ocaml,与Haskell语言也基本一致。本文只会讲解一些常用的使用方法,要很好的掌握列表,各位朋友可以google一下相关的内容。网络上对列表讨论比较深刻的大多以Haskell语言为例(Lisp语言列表很强大,但与大多数函数式语言列表的区别太大,不好借鉴)。
一、如何定义列表
在F#中定义一个列表,有几个方法。
1、使用字量值
letl=[1;2;3]
letemptyList=List.empty
letlista=l@emptyList
letlistb=0::lista
使用中括号'[',']',元素之间用分号分隔。不同于元组类型,元组使用'(',')',元素之间使用逗号分隔。
F#中的列表是链表,列表元素必须是相同类型,列表是不可变的,因此定义后将不能改变。
F#中定义一个空列表,有三种方法。它们在使用上有一些细微的差别。
printfn"%A"((List.empty<int>).GetType())
printfn"%A"((List.Empty:intlist).GetType())
printfn"%A"(([]:intlist).GetType())
列表上定义了一个 @ 操作符,用于将一个列表追加到另一个列表的尾部,生成一个新的列表。而 :: 操作符,则将一个元素添加到一个列表的首部,形成一个新的列表。注意所有操作的列表本身不会改变。这种行为类似.net的string类型。
2、使用范围表达式
letl1=[1..10]
letl2=[1..2..100]
letl3=['a'..'z']
3、使用序列表达式
letl4=[foriin1..10doif i>4&&i<8thenyieldi]
版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明!