前言:最近在了解F#,无意中看到一个日文的教程(http://techbank.jp/Community/blogs/gushwell/default.aspx),觉得很不错,所以希望可以和大家一起分、学习。
接着上回的数组,这回我们学习list。
#light
let lista = [1;2;3;4;5]
let listb = [6..10]
let listc = lista @ listb
printfn "%A" listc

和用[| ...|]来表示数组不同,list通过[ ... ]表示,而不用|。和数组一样的是,要素之间通过;(分号)分开,是不是觉得有点奇怪啊?
list的连接通过@运算符,有了它就很方便了。这和通过函数进行list连接相比,可读性也提高了。
运行结果是:
[1; 2; 3; 4; 5; 6; 7; 8; 9; 10]

要在list头部插入要素可以使用如下代码:
let liste = 10::lista
printfn "%A" liste

其中,::运算符就可以在list的头部之前插入要素。
调查后发现,好像没有在list尾部加入要素的运算符号。
从list中一个一个取出要素,通过使用for就可以简单实现:
for n in liste do
printfn "%d" n

这和C#的foreach一样。
经过刚才的学习之后,就可以试着写如下计算list要素总和的代码了。
#light
let rec SumTotal list =
        if list = []    then 0
        else List.hd list + SumTotal (List.tl list)
printfn "%d" (SumTotal lista)

这样就可以避免变量的再赋值,但是使用了递归处理。C#很难写的程序,用了F#的话,就会有更多的思考和考虑的时间。
和loop处理相比,感觉递归处理更优雅!这样就可以不必过多考虑如何写代码,而关注要写什么。
List.hd是用来取出list的第一个元素的函数。
List.tl是返回除了第一个元素以外剩下元素组成list的函数。
在Visual Studio中,输入List.后就会显示出很多相关的函数。这些可以在以后继续调查。
此外,分支处理中还使用了Haskell中也有的Pattern Match。这些在今后的文章中也会继续关注。