這個 Haskell 代碼列印出 [0,10,20,30,40,50] 但我不明白第三行中的 'y' 應該做什么。
f [] = []
f [x] = [x]
f (x:y:xs) = x : f xs
main = print (f [0,5..50])
如果我說,為什么它不列印相同的結果 f (x:xs) = x : f xs?
如果有人能為我解釋邏輯,我將不勝感激。
uj5u.com熱心網友回復:
(x:y:xy)匹配包含至少兩個元素的串列,并系結x到第一個元素、y第二個元素和xs串列的尾部。
通過呼叫x: f xs第二個元素從結果串列中移除。
由于從未使用此值,因此根本不需要呼叫它y。
f [] = []
f [x] = [x]
f (x:_:xs) = x : f xs
main = print (f [0,5..50])
如果你改為寫:
f [] = []
f [x] = [x]
f (x:xs) = x : f xs
main = print (f [0,5..50])
結果將只是原始串列,因為第二個元素永遠不會“洗掉”。
uj5u.com熱心網友回復:
中的模式f (x:y:xs)是說:獲取函式的輸入,將串列的第一個元素分配給x,將第二個元素分配給 ,并將串列y的其余(尾部)分配給xs。這個函式回傳第一個元素x,然后是應用f到的結果xs。從本質上講,您正在從串列中洗掉每隔一個元素。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/493302.html
標籤:哈斯克尔
