Magical examples in Haskell

原文在haskell wiki上,里面列举了一些比较cool的haskell精简代码,在FP编程中一行或许可以搞定Java中的很多行,这也得益于FP语言强大的抽象能力。

 

pascal 三角形算法:

 

pascal = iterate (\row -> zipWith (+) ([0] ++ row) (row ++ [0])) [1]

 以前写过一个pascal算法,相对这个就太臃肿了。

 

Primes:

 

nubBy (((>1).).gcd) [2..]

 一直都希望能找到primes的一行解决方法,现在终于有了,haskell的lazy真是一绝。

 

List monad:

 

do { x <- "12"; y <- "45"; return [x,y] }

 这个有点像列表领悟

 

all combinations of letters:

 

(inits . repeat) ['a'..'z'] >>= sequence

 

FP给我们的强大抽象能力是主流语言C/C++/Java所无法比拟的,实现同一个逻辑,C/C++/Java写出来的程序其实没有本质区别,更多的是语法上面的不同。

 

今天忽然想到一个问题,其实haskell的purity和lazy是联系在一起的,不是独立的两个特性,想象一下,在充满了map/filter/reduce的FP语言中如果没有lazy的特性的话,list的处理会变得非常慢(这里不考虑compiler的优化处理),多调用几个map和filter的话list就要多循环很多遍,如果语言支持lazy的话,则list的处理很多情况下比strict的语言会快很多。

 

下面是haskell老兄:

 

http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Curry.html

如果按照数学分支划分的话,haskell老兄研究的应该是数理逻辑。

 

你可能感兴趣的:(haskell)