我正在研究一个功能,该功能一个接一个地添加两个列表中的元素。如果结果大于10,则只需要最低有效位,而不是整数。
这是我写的代码:
add (x:xs) (y:ys) = if x+y > 10 then (x+y):add(xs ys)
else (x+y-10):add(xs ys)
问题在于类型匹配,它在递归调用时给我错误。似乎无法识别这两个列表。
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 _ [] = []