①一切都是函数,包括常量、表达式,格式:名字 参数1 参数2.. =函数内容
②if语句(else绝对不可以省略)
F=if (..) then x
else y
③没有数组,只有列表[1,2,3,4,5], [‘h’,’e’]
列表有好多运算符:
“++” :同类型拼接
“ : “ :前端插入,1:2:3:4:5:[]等效于[1,2,3,4,5],没有后端插入!
“!!”: 下标索引,从0开始,[1,2,3]!!1=2
列表是可以嵌套的[[1,2],[3,4]]
列表是可以比较的[1,2,3]<[1,3]
列表有一些常用函数,注意这些混乱的名字
head []:返回首元素
last []: 返回尾元素
tail []:返回去除头元素后的列表
init []:返回去除尾元素后的列表
null []:检测是否空
reverse []:反转
take/drop 5 []:取/扔列表前5个元素
maximum/minimum []: 最值
sum/product []:和与积
elem 4 [1,4]: 是否存在,通常中缀形式,即 4 `elem` [1,4]
④列表可以自由推导,最好不要去推导浮点数(精度问题)
[1..20]就是1~20了,[‘a’..’z’]就是a~z
只要告诉步长就可以自由推导,如[1,4..11]=[1,4,7,11]
注意20~1应该这么写[20,19..1],因为默认的等差推导认为d>0
列表是惰性的。
[1,4..]尽管是无限的,但却是合法的,你可以take 5 [1,4..]取出前5项,要多少算多少,Lazy!
相关惰性函数(注意格式!!)
take 5 (cycle [1,2,3]) //生成123循环列表
take 5 (repeat 5) //生成5循环列表
⑤万能的列表表达式
还记得高中学集合时,描述型表示集合么 {x|x<10,x-(N}
看这个例子[x|x `mod` 3==1,odd x],这个就是给定一堆条件创造的列表,所有条件逗号隔开,且都是逻辑与关系,返回的不仅可以是x, x*y也行,(x,x)也行
列表表达式可以是函数(Orz)
看这个函数fuck xs=[x|x `mod` 3==1,odd x],调用时fuck [1..10]
列表表达式可以嵌套
[ [x|x<-xs]|xs<-xxs] ,当然xxs就得是嵌套列表
⑥细胞数组?元组!
(1,”hello”,”a”) ,用C语言来解释原理,就是建了个结构体。
列表套元组,元组的形式(个数&类型)必须一致,因为列表中的类型必须一致,一个元组就是一个结构体,一种限定的类型
二元组别称序对,有三个函数,fst/snd,取第一/第二元素,zip [1..20] [20..30],zip就是拉链的意思,自动从两个列表中生成[所有序对],长度由最短那个控制
原文:http://www.cnblogs.com/neopenx/p/4273486.html