學習軌道
/
Haskell
Haskell
/
練習
/
盧西恩的美味千層麵
盧西恩的美味千層麵

盧西恩的美味千層麵

學習練習

簡介

常數與函式

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 使用空白與縮排來界定程式碼的範圍。 屬於某個運算式的程式碼,其縮排必須比該運算式的起始位置更往內。

  • 模組、import 與最上層的函式定義必須從最左欄開始。
  • 如果一個運算式被拆成多行,屬於該運算式的程式碼必須縮排在該運算式之下,並至少留一個空格。
  • 運算式中歸為同一組的部分,應該以相同數量的空格縮排。
-- 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

說明

在這個練習中,你會寫一些程式碼,幫助你照著最愛的食譜做出一份超棒的千層麵。

你有三個任務,都跟烹調千層麵所花費的時間有關。

1. 定義千層麵預期的烤箱時間(分鐘)

定義expectedMinutesInOven常數,用來確認千層麵應該在烤箱裡烤幾分鐘。根據食譜,預期的烤箱時間是 40 分鐘:

expectedMinutesInOven
    --> 40

2. 計算準備時間(分鐘)

定義preparationTimeInMinutes函式,它接受你加進千層麵的層數作為參數,並回傳你準備千層麵花了幾分鐘,假設每一層需要 2 分鐘準備。

preparationTimeInMinutes 3
    --> 6

3. 計算經過的時間(分鐘)

定義elapsedTimeInMinutes函式,它接受兩個參數:第一個參數是你加進千層麵的層數,第二個參數是千層麵已經在烤箱裡待了幾分鐘。這個函式應該回傳你烹調千層麵總共花了幾分鐘,也就是準備時間加上千層麵目前待在烤箱裡的時間。

elapsedTimeInMinutes 3 20
    --> 26
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Haskell Exercism

準備好開始 盧西恩的美味千層麵 了嗎?

註冊 Exercism,透過 107 個練習 和真人引導來學習並精通 Haskell,全部免費。