我正在研究一个将元素逐个添加到列表的函数,如果结果大于10,我只需要最后一位,而不是整数。我写的代码:
add (x:xs) (y:ys) = if x+y > 10 then (x+y):add(xs ys)
else (x+y-10):add(xs ys)
问题在于类型匹配,它在递归调用时给我错误。似乎可以识别2个列表
Haskell在函数调用中不需要括号。这是一个工作函数调用:
max 5 2
[当在add函数调用中在两个列表之间加上括号时,您告诉Haskell将它们解释为一个对象-但是在Haskell中仅将两个列表彼此写在后面是无效的。
这是您的代码的有效变体:
add (x:xs) (y:ys) = if x + y > 10 then (x + y - 10):(add xs ys)
else (x + y):(add xs ys)
add [] _ = []
add _ [] = []