10
我剛開始學習Haskell,我試圖使用模式匹配來匹配具有2個元素的列表。作爲一個練習,我試圖編寫一個函數,它返回列表中的最後一個元素。到目前爲止,我發現這一點:與Haskell中的2個元素匹配的模式匹配列表
myButLast :: [a] -> a
myButLast [] = error "Cannot take one but last from empty list!"
myButLast [x] = error "Cannot take one but last from list with only one element!"
myButLast [x:y] = x
myButLast (x:xs) = myButLast xs
現在用myButLast [X:Y]行顯然是不正確的,但我不知道如何搭配剛好有2個元素的列表,因爲這是我米試圖在那裏做。我讀這(http://learnyouahaskell.com/syntax-in-functions#pattern-matching)頁面,它幫了我很多,但我不完全有尚未...
你可以寫'[x,y]'或'x:y:[]'。它們都是等同的。模式'[x:y]'意思是「匹配一個只包含一個元素的列表,它本身就是一個列表,它包含兩個名爲'x'和'y'的元素,這不是你的意思。 – MathematicalOrchid
@MathematicalOrchid哦,我明白了。非常感謝你! –
實際上,不,這是錯的......'[x:y]'表示'x'是第一個元素,'y'是剩下的子列表。 (想''[x:xs]'。)對不起,這......不管怎樣,這不是你的意思。 – MathematicalOrchid