[Haskell筆記]list
Sunday, November 30th, 2008函數是構建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可以成立,哪些不可以,為什麽?
- [12, 80]
- [42, "life, universe and everything else"]
- ["beer", "sandwiches"]
- [5, 4.5]
- ["45", "True"]
- [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