Tw/Haskell入門的5個步驟
Haskell 是一個純粹的函式程式语言。本頁將幫助你快速的入門
安裝 Haskell
跟多數語言一樣, Haskell有兩種執行方法: 批次處理("編譯器")跟交互式("直譯器")。直譯式系統可以給你一行命令列(Command line), 讓你直接的進行實驗或評估。
GHC | 編譯器和直譯器(GHCi) | 最多人用, 也是最有未來性的系統 |
Hugs | 編譯器 | 移植性佳, 而且比GHC小的多. |
GHC跟Hugs都可以在 Windows 上作業,Hugs有最佳的平台整合。除此之外, GHC是最多實際用來開發與維護的. 這兩套軟體無異是適合新手或老手的選擇。在 Mac OS X 上安装 Haskell。
開始使用Haskell
開啟一個終端機. 如果你已經安裝了GHC, 直接在命令列上輸入 ghci (GHC的直譯器的名子)。如果你安裝的是Hugs, 輸入 hugs。
$ ghci ___ ___ _ / _ \ /\ /\/ __(_) / /_\// /_/ / / | | GHC Interactive, version 6.4, for Haskell 98. / /_\\/ __ / /___| | http://www.haskell.org/ghc/ \____/\/ /_/\____/|_| Type :? for help. Loading package base-1.0 ... linking ... done. Prelude>
當你出現提示符號, 那表示Haskell系統已經在準備你的輸入了。
撰寫你的第一個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, Windows則為hello.exe )
$ ./hello Hello, World!
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.Base> :load fac.hs
Main> fac 42
1405006117752879898543142606244511569936384000000000
我們也可以編譯這個程式,產生一個獨立的執行檔. 在fac.hs裡可以這樣寫。 (這裡換了一個比較優雅的寫法, 只是為了好玩.)
fac 0 = 1
fac n = n * fac (n-1)
main = print (fac 42)
現在可以編譯並執行它:
$ ghc -o fac fac.hs $ ./fac 1405006117752879898543142606244511569936384000000000
幹的好!
接著該往哪走
有很多很好的Haskell教學資料跟書本。這裡有一些我們推薦的:
教學
- Haskell趣學指南
- 十分鐘學會 Haskell
- Yet Another Haskell Tutorial (English)
- A Gentle Introduction to Haskell (English, File:GentleFR.pdf)
完整的列表, 參考跟教學:
加入社群!
跟別的Haskell社群成員交流:
- Haskell-Cafe mailing list
- IRC 頻道 (目前 freenode 上有台灣頻道 #haskell.tw)
語言: English