Archive for 六月, 2008

Haskell in 5 steps

星期日, 六月 8th, 2008

最近在看象棋的對戰系統, 所以就稍微看了一下functional programming.
然後找到haskell, 查了一下才發現原來就是tim之前介紹過的. 真是有趣的東西.

我練習程式時會有順手翻譯入門文件的習慣… 所以下面是翻的.

翻一翻也順便送一份到Haskell的wiki上.

—-
Haskell入門的5個步驟

Haskell 是一個純粹的函式編程语言。本頁將幫助你快速的入門。

1. 安裝Haskell

跟多數語言一樣, Haskell有兩種執行方法: 編譯跟直譯.
直譯式系統可以給你一行命令列(Command line), 讓你直接的進行實驗或評估.

GHC Compiler and interpreter (GHCi)
最多人用, 也是最有未來性的系統
Hugs Interpreter only
移植性嘉, 而且比GHC小的多.

GHC跟Hugs都可以在{ 某大廠作業系統 }上作業, Hugs有最佳的平台整合.
除此之外, GHC是最多實際用來開發與維護的. 這兩套軟體無異是適合
新手或老手的選擇.

2. 開始使用Haskell

開啟一個終端機. 如果你已經安裝了GHC, 直接在命令列上輸入ghci
(GHC直譯器的名子)
如果你安裝的是Hugs, 輸入 hugs

kevin@lls:~$ ghci
GHCi, version 6.8.2: http://www.haskell.org/ghc/ :? for help
Loading package base … linking … done.
Prelude>

當你出現提示符號, 那表示Haskell系統已經在準備你的輸入了.

3. 撰寫你的第一個Haskell程式

如果你已經學過其他程式了. 你的第一個程式大概是』Hello, world!』.
讓我們也這樣搞吧.

Prelude> 『Hello, World!』
『Hello, World!』

Haskell系統評估為一個字串(string), 接著列出(printed)結果.
或著我們可以用另一種方法將它直接列印到標準輸出上.

Prelude> putStrLn 『Hello World』
Hello World

使用Haskell的編譯器, 像GHC. 你可以編譯程式碼讓程式獨立執行.
建立一個hello.hs, 內容為:

main = putStrLn 『Hello, World!』
然後用下列命令編譯他:

$ ghc -o hello hello.hs

接著你就得到一個可執行的執行檔了.
( Unix系統為./hello, hello.exe 則為{ 某大廠作業系統 } )

kevin@lls:~/Haskell$ ./hello
Hello, World!

4 Haskell的計算

來搞些有趣的吧. 在Haskell, 你的第一個真正的程式是乘階的function.
所以現在讓我們回到直譯器, 接著輸入:

Prelude> let fac n = if n == 0 then 1 else n * fac (n-1)

這一行定義了一個新的function, 名子叫fac. 將接收一個整數以供乘階運算.
我們可以輸入參數執行fac:

Prelude> fac 42
1405006117752879898543142606244511569936384000000000

需要注意的是如果你使用的是Hugs, 你將需要從檔案中載入定義的fac, fac.hs.
內容為:

fac n = if n == 0 then 1 else n * fac (n-1)

然後用Hugs執行他, 如下(在GHCi也能這樣做)

Hugs:

Hugs.Base> :load fac.hs
Main> fac 42
1405006117752879898543142606244511569936384000000000

GHCi:

Prelude> :load fac.hs
[1 of 1] Compiling Main ( fac.hs, interpreted )
Ok, modules loaded: Main.
*Main> fac 42
1405006117752879898543142606244511569936384000000000

我們也可以編譯這個程式, 產生一個獨立的執行檔. 在fac.hs裡可以這樣寫.
(這裡換了一個比較優雅的寫法, 只是為了好玩.)

fac 0 = 1
fac n = n * fac (n-1)

main = print (fac 42)

現在可以編譯並執行它

kevin@lls:~/Haskell$ ghc -o fac fac.hs
kevin@lls:~/Haskell$ ./fac
1405006117752879898543142606244511569936384000000000

幹的好!

5. 接著該往哪走

有很多很好的Haskell教學資料跟書本. 這裡有一些我們推薦的.

教學:

Haskell in 10 minutes
Yet Another Haskell Tutorial (English)
A Gentle Introduction to Haskell (English, French PDF)

完整的列表, 參考跟教學:

Books and tutorials

加入社群:
跟別的Haskell社群連絡:

Haskell-Cafe mailing list
IRC channel