[Haskell筆記]list

函數是構建Haskell程序的兩大基本部件之一,另一個則是list(列表)。

list的表示方法很簡單,首先列舉list的各成員,然後以“,”分隔各成員,最後用“[”和“]”標記list的開頭和結尾。比如,[1,2,3,4]。

為了便於以後的稱說,我們通常給list“起個名字”(指定一個符號代表它),例如:

Prelude> let numbers = [1,2,3,4]
Prelude> let truths  = [True, False, False]
Prelude> let strings = ["here", "are", "some", "strings"]

特別要當心的是,list中的成員必須擁有相同的類型。在上面的三個例子中,numberslist的成員都是Integer(整數),truthslist的成員都是Bool(布爾值),stringslist的成員都是String(字符串)(字符串用”"括起來)。不同類型的成員無法在一個list中共存。比如,如果輸入:

Prelude> let mixed = [1,True]

GHCi就會報錯:

<interactive>:1:13:
    No instance for (Num Bool)
      arising from the literal `1' at <interactive>:1:13
    Possible fix: add an instance declaration for (Num Bool)
    In the expression: 1
    In the expression: [1, True]
    In the definition of `mixed': mixed = [1, True]

這是因為1的類型是Integer,而True的類型是Bool,兩者類型不同。

練習

6.1 以下哪些list可以成立,哪些不可以,為什麽?

    1. [12, 80]
    2. [42, "life, universe and everything else"]
    3. ["beer", "sandwiches"]
    4. [5, 4.5]
    5. ["45", "True"]
    6. [pi, 56]

答案

5.1 25

Prelude> areaSquare 5
25

5.2

Prelude> let areaCircle r = pi * r ^ 2
Prelude> let volCylinder r h = areaCircle r * h

5.3

Prelude> let areaRect l w = l * w
Prelude> let areaSquare s = areaRect s s
Prelude> let areaCircle r = pi * r ^ 2
Prelude> let diffOfCnS r = areaCircle r - areaSquare r

Leave a Reply

Spam Protection by WP-SpamFree