打开主菜单

Haskell是一个标准化的,并且没有语义限制的函数式编程语言。Haskell的特性在于对具有递归性的函数和数据类型,模式匹配和列表操作。这样的一组特性使得一些用过程式编程语言很难书写的函数在Haskell中很容易就能实现。到2002年为止,这个语言是研究的最为广泛的函数编程语言。

例子编辑

一个经典的阶乘函数的定义如下:
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写的高级版本控制系统。