F#的List和数组中,有一种被称为内包式的特殊标记方法。使用了这些,list相关的代码就会变得很简洁。我们就试着写如下代码:
let evenarray = [| for x in 0..10 -> x*2 |]
printfn "%A" evenarray

运行结果是:
[|0; 2; 4; 6; 8; 10; 12; 14; 16; 18; 20|]

生成list的代码如下:
let tupleList = [ for x in 0..5 -> x, x * x ]
printfn "%A" tupleList

这次运行的结果是:
[(0, 0); (1, 1); (2, 4); (3, 9); (4, 16); (5, 25)]

如果不使用内包的话,代码可能非得如下这样不可:
let evenarray = Array.create 11 0
for i in 0..10 do
    evenarray.[i] <- i * 2

是不是感觉有点麻烦啊?
对于list,如果不使用list内包式是不是应该如下这样啊?
let mutable evenlist = []
for i in 0..10 do
    evenlist <- List.append evenlist [(i * 2)]

不使用mutable的话好像还不行。这里的append有点像C#的静态函数吧?
有了内包式,就不要写这么麻烦的代码了。
此外,生成增量递增的数组或list的时候还可以使用“初始值..增量..终止值”的写法:
let a = [| 0..2..20 |]
let b = [100..-10..0]

使用F#还真的可以写很简洁的代码!