Haskell 程式由定義與運算式組成。
常數值以name = expression定義。
five = 5
six = 3 + 3
函式以name parameters... = expression定義,其中的參數僅以空格分隔。
add number1 number2 = number1 + number2
呼叫函式本身也是一種運算式,做法是指定函式的名稱,並為函式的每個參數傳入引數,以空格分隔,就和定義函式一樣。
five = add 2 3
括號可以用來指定運算式的求值順序。
six = add 2 (1 * 4)
twelve = add 2 1 * 4
Haskell 使用空白與縮排來界定程式碼的範圍。 屬於某個運算式的程式碼,其縮排必須比該運算式的起始位置更往內。
-- A function split over multiple lines, so subsequent lines must be indented
add number1 number2 =
number1 + number2
https://en.wikibooks.org/wiki/Haskell/Indentation
模組會匯出函式。 這表示你可以使用模組在匯出敘述中提供的函式。 模組也可以定義僅供內部使用的函式。 預設情況下,沒有明確匯出的函式無法從模組外部使用。
在模組開頭,我們會指定模組名稱。 如果有一個名為 Calculator.hs 的檔案,就應該把模組命名為 Calculator。 接著,我們指定它要匯出的函式,然後就可以開始撰寫函式了。 所以我們會從這個開始。
module Calculator ( add ) where
https://learnyouahaskell.github.io/modules#making-our-own-modules
註解是 Haskell 檔案中不會被解讀為程式碼的一段文字。
它主要是給你和其他程式設計師閱讀的。
單行註解有一種輕量的語法,是以雙破折號為基礎。
多行註解則可以用 {- 與 -} 這對開頭與結尾的定界符來撰寫。
-- a single line comment
-- another single line comment
{- a multiline comment
spanning multiple lines
-}
這份練習簡介大量取材自 Learn You a Haskell for Great Good!, 採用 Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License
在這個練習中,你會寫一些程式碼,幫助你照著最愛的食譜做出一份超棒的千層麵。
你有三個任務,都跟烹調千層麵所花費的時間有關。
定義expectedMinutesInOven常數,用來確認千層麵應該在烤箱裡烤幾分鐘。根據食譜,預期的烤箱時間是 40 分鐘:
expectedMinutesInOven
--> 40
定義preparationTimeInMinutes函式,它接受你加進千層麵的層數作為參數,並回傳你準備千層麵花了幾分鐘,假設每一層需要 2 分鐘準備。
preparationTimeInMinutes 3
--> 6
定義elapsedTimeInMinutes函式,它接受兩個參數:第一個參數是你加進千層麵的層數,第二個參數是千層麵已經在烤箱裡待了幾分鐘。這個函式應該回傳你烹調千層麵總共花了幾分鐘,也就是準備時間加上千層麵目前待在烤箱裡的時間。
elapsedTimeInMinutes 3 20
--> 26