Haskell/概述

From Wikibooks
Jump to navigation Jump to search

作為標準化的函數式程式語言,Haskell沒有嚴格的語義限制。Haskell有趣的特性包括純函數、高階函數、可遞歸函數、數據類型、模式匹配、惰性求值和列表操作。這些特性幫助我們輕鬆實現在過程式編程語言很難實現的函數。到2002年為止,Haskell是研究和使用得最為廣泛的函數式程式語言。

例子[edit]

一個經典的階乘函數的定義如下:
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]
(注意由於多次的複製和重排列表會使得這段代碼執行起來可能會比較慢,取決於實際情況。)

不僅僅是快速排序![edit]

Haskell同樣可以構造「現實世界」的程序,包括圖形和網絡用戶界面。要體驗一下現實世界的例子,參見 Hope,用Haskell寫的博客/內容管理系統,以及 darcs,一個用Haskell寫的高級版本控制系統。