Haskell/概述
作为标准化的函数式编程语言,Haskell没有严格的语义限制。Haskell有趣的特性包括纯函数、高阶函数、可递归函数、数据类型、模式匹配、惰性求值和列表操作。这些特性帮助我们轻松实现在过程式编程语言很难实现的函数。到2002年为止,Haskell是研究和使用得最为广泛的函数式编程语言。
例子
编辑一个经典的阶乘函数的定义如下:
fac 0 = 1
fac n = n * fac (n - 1)
一个精巧的阶乘函数定义(使用了Haskell内部的表的注记形式和乘积函数 product
):
fac n = product [1..n]
一个简单的Fibonacci数列的函数实现,这个函数返回了Fibonacci数列的第n项:
fib 0 = 0
fib 1 = 1
fib n = fib (n - 2) + fib (n - 1)
在线性时间内返回Fibonacci数列的函数实现:
fibs = 0 : 1 : (zipWith (+) fibs (tail fibs))
上面的函数返回的是一个无穷项的表,是由于惰性求值(lazy evaluation)而可能实现的。
一种可能的fib
实现:
fib n = fibs !! n
(!!
是获得表的第n项的操作符)。
快速排序算法可以利用Haskell在表操作的帮助下优雅地实现。
qsort [] = []
(注意由于多次的复制和重排列表会使得这段代码执行起来可能会比较慢,取决于实际情况。)
qsort (x:xs) =
qsort elts_lt_x ++ [x] ++ qsort elts_greq_x
where
elts_lt_x = [y | y <- xs, y < x]
elts_greq_x = [y | y <- xs, y >= x]
不仅仅是快速排序!
编辑Haskell同样可以构造“现实世界”的程序,包括图形和网络用户界面。要体验一下现实世界的例子,参见 Hope,用Haskell写的博客/内容管理系统,以及 darcs,一个用Haskell写的高级版本控制系统。