标题: ASP.NET网页编程之【F#2.0系列】利用F#的List [打印本页] 作者: 逍遥一派 时间: 2015-1-16 22:20 标题: ASP.NET网页编程之【F#2.0系列】利用F#的List 其实Java之所以在曾经独步天下,就是因为他的跨平台、安全性,这两方面,效率可不是Java的强项,反而是他最短的一块挡板,虽然net总是用理论证明比.NET快。利用F#的List 创立一个list:
语法 形貌 示例 [] 空list [] expr::expr 将一个项到场一个list 1::[2;3] [expr;...;expr] 枚举项创立list [1;2;3] [expr..expr] 一连的数字 [1..99] [forxinlist...] 经由过程运算天生list(相似于Linq里的select) [forxin1..99->x*x] expr@expr 兼并两个list [1;2]@[3]
操纵示例:
let oddPrimes = [3; 5; 7; 11]
let morePrimes = [13; 17]
let primes = 2 :: (oddPrimes @ morePrimes)
val primes : int list = [2; 3; 5; 7; 11; 13; 17]
list一样是不成变的(immutable):操纵符“::”并未真正改动原list自己,相反的,它创立了一个新的list。示例:
> let people = [ "Adam"; "Dominic"; "James" ];;
val people : string list
> people;;
val it : string list = [ "Adam"; "Dominic"; "James" ]
> "Chris" :: people;;
val it : string list = [ "Chris"; "Adam"; "Dominic"; "James" ]
> people;;
val it : string list = [ "Adam"; "Dominic"; "James" ]
如你所见,people并未被改动。在内存中,F#将list暗示为联系关系的list;每一个F#的list的值(value)包括了本身的值和指向下一个列表的指针。也就是说当你利用“::”来创立一个新的list的时分,新list的尾部就包括了一个指向老list的指针。
在我看来,经由过程不成变性与指针的分离,进步了list的内存使用效力。
我们再看一个分化(decompose)list的例子:
let oddPrimes = [3; 5; 7; 11]
let printFirst primes =
match primes with
h :: t -> printfn "The first prime in the list is %d" h
[] -> printfn "No primes found in the list"
> printFirst oddPrimes;;
The first prime in the list is 3
val it : unit = ()
程序经由过程h::t来分化list,h代表list的第一个元素,t代表厥后续。[]代表空list。match是婚配入手下手关头字,primes是婚配源,经由过程暗示各类婚配前提。感到相似于switchcase。
F#包括了一个List模块。其供应了一些功效:
办法 范例 形貌 List.length Tlist->int 前往list长度 List.head Tlist->T 前往非空list的第一个元素 List.tail Tlist->Tlist 前往非空list中除第一个元素外的其他一切元素 List.init int->(int->T)->Tlist 经由过程一个能够经由过程索引天生值的函数来机关一个定长list List.append Tlist->Tlist->Tlist 前往一个兼并后的list List.filter (T->bool)->Tlist->Tlist 前往一个新的过滤后的列表。 List.map (T->U)->Tlist->Ulist 将一个list经由过程一个转换函数转换为另外一个list List.iter (T->unit)->Tlist->unit 对list中的每一个项实行一次指定的函数 List.unzip (T*U)list->Tlist*Ulist zip操纵的反向操纵 List.zip Tlist->Ulist->(T*U)list 将两个具有不异长度的list兼并成一个新的list,不异index的项会组分解元组(tuple),并作为新list中的项。 List.toArray Tlist->T[] 从一个list天生一个array List.ofArray T[]->Tlist 从一个array天生一个list
下面的申明还都是对照笼统的,示比方下:
> List.head [5; 4; 3];;
val it : int = 5
> List.tail [5; 4; 3];;
val it : int list = [ 4; 3 ]
> List.map (fun x -> x*x) [1; 2; 3];;
val it : int list = [ 1; 4; 9 ]