python 入门编程, 之后用 c++ 学习数据结构, Haskell 萌新.
参考教材: Learn You a Haskell for Great Good (http://learnyouahaskell.com/)
操作环境: Ubuntu 下 Linux64 位虚拟机
Chapter1 部分内容
逻辑运算
逻辑值 Boolean value: True, False
逻辑运算符 Boolean operator: &&, ||, not
判断相等和不等 Equality and inequality: ==, /=
运算优先级 priority ()> 函数调用 function call> 其它数学运算 others
If...then...else
Haskell 要求有 if 必须有 else.
List
Haskell 的 list 类似于 c++ 里的数组 (array), 必须是相同类型的元素 (homogeneous), 使用 [ ] 包围.
列表属性:
length a(list) 获取元素个数
null a(list) 判断是否是空 list.
元素添加:
a(list) ++ b(list): 遍历 a 后将 b 加在尾部.
a(element): b(list) : 将 a 加在 b 的开头.
a(element) `elem` b(list) 判断 a 是不是 b 中的元素.
以上二者中后者在元素多时据说更高效. 可能是类似链表的结构?
元素获取:
a(list) !! b(index) 利用下标获取. 从 0 开始计算下标. python 和 c++ 里的 [ ]
head a(list) 获取第一个元素.
tail a(list) 返回除去第一个元素后的 list.
last a(list) 获取最后一个元素.
init a(list) 获取除去最后一个元素后的 list.
take a(int) b(list) 从 b 中获取前 a 个元素组成的 list, 不足则返回整个 list
drop a(int) b(list) 从 b 中获取去除前 a 个元素后余下的 list, 不足则返回空 list.
多个 list:
小 list 可以组成大 list, 但是同样要求不同 list 的元素类型相同.
list 比较参考字符串比较规则.
其它操作:
reverse/sum/product/maximum/minimum a(list) 倒置, 求积, 求和, 求最大元素, 求最小元素
replicate a(element) b(int) 将 a 重复 b 次构成 list.
cycle a(list), repeat a(element) 获取由 a 构成的 list
Range
Haskell 中, range 的表达类似于数学, 使用若干样例作为模板, 使用.. 表示省略, 元素个数可以有限也可以无限. 默认模式类似求 succ.
range 在我的理解里与 python 中类似, 也是一种 iterator 对象. 考虑到这门语言 lazy 的性质, 只有在需要的时候才会被呈现. 这也是为什么上面的 cycle, repeat 可以使用 (毕竟算法要求有限性)
另外, 这里的 range 是前后都闭的.
List Comprehension
Haskell 中的 list comprehension 的用法与 Python 类似, 但是表达上更接近数学中的集合表达. 使用 | 分割元素和条件, 使用, 分割多个条件, 使用 <- 表达属于. 范围限制条件放在其他条件之前.
Tuple
tuple 可以存放类型不同的元素. 不同长度或者元素种类不同的 tuple 都被视为不同的类型, 不能放在同一个 list 中. tuple 使用 ( ) 包围.
对于二元组, 可以使用 fst 和 scd 获取第一个和第二个元素.
来源: http://www.jianshu.com/p/41478514addb