我目前正在學習haskell,然後我來到這個練習中,我必須定義一個函數來獲取數字列表的結果。我被提供了選擇,並且因爲我是哈斯克爾的新手,所以有一些符號我有點不清楚。冒號與括號中的haskell列表語法
所以我看到的選擇一個這樣的定義:
p [x, xs] = x * product xs
我能理解這個相當多,就意味着拿到名單的產物,然後用x的值相乘。
然後我看到了其他的選擇之一這個其他的定義:
p (x : xs) = x * product xs
我完全不明白。它使用括號和冒號,我很難找到它們的定義。我很感激有人可以在語法和語義方面給我啓發。
需要注意的是,語法'[x,y,z]'是'x:y:z:[]'的語法糖。實際上,列表的定義看起來非常像'data [] a = [] | a:([] a)'。 ':'是數據類型'[a]'的構造函數,你只是在構造函數上進行模式匹配。因爲我們是程序員,並且喜歡用'[1,2,3]'而不是'1:2:3:[]'來編寫列表,所以編譯器有特殊的規則來將前者變成後者。當你看到'(x:xs)'形式的模式時,記住這一點。 – bheklilr 2014-10-16 15:05:30
第一個例子看起來不像它應該類型檢查... – MathematicalOrchid 2014-10-16 15:54:45
@自己:不,它可能是類型檢查,因爲有人可以編寫'實例Num []'... – MathematicalOrchid 2014-10-16 16:39:49