[language] Haskell惰性的一个极佳的例子
jamcode
2011-09-04
前天看到一段Haskell代码,
生成一个无限的Fibonaci数组 fibs = 1:1:zipWith (+) fibs (tail fibs) --输出第10个fibnaci数 print fibs!!9 一般的函数递归调用都需要设边界条件,比如典型的quick sort代码: --边界条件是空数组返回其自身 qksort []=[] qksort (x:xs)=(qksort $ filter (<= x) xs) ++ [x] ++ (qksort $ filter (>x) xs) 但是这个fibs函数没有设置边界条件递归调用,即可生成一个无限长的list,不得不让人惊讶于惰性求值原来可以这样使用 同样的另外一段,最简单的repeat函数即是这样实现的 repeat x=x:repeat x 在Haskell中,真不能用命令式的思维去思考,不然这样的代码会令人想不通 4SEO:http://www.jamcode.org/ |
|
jamcode
2011-09-04
顺便带上,生成无限fibonaci数列用iterate,免去声明函数,
map fst $ iterate (\(a,b)->(b,a+b)) (1,2) |