写haskell程序就像玩个角色扮演游戏。一个角色A有手有脚视力2.0,唯独没脑子,什么问题都不会解决。另一个角色B全能但是无知无识无手无脚,啥也干不了,整个故事就是角色A拿碰到的需要解决的问题去问B。
但是B无知无识,问问题着实不容易,就像《你是我的眼》里唱的,“眼前的黑不是黑,你说的白是什么白” 。所以都得定义成抽象的概念才能让B去解决问题。
对我这样用惯了java自己想办法解决问题的程序员来说,转换到这种把自己变成一个提问题的角色,还挺难的。 不过语言的能力着实强大。只要你能把问题问清楚,结果就出来了。
比如,quicksort,你就告诉他,我要让一个list里面的每个元素x左边的都比它小,右边的都比他大,你就得到了。
quicksort (x:xs) = let smallerSorted = quicksort [a | a <- xs, a <= x] biggerSorted = quicksort [a | a <- xs, a > x] in smallerSorted ++ [x] ++ biggerSorted