【发布时间】:2019-12-24 08:16:54
【问题描述】:
我正在开发一个从两个列表中逐一添加元素的函数。如果结果大于 10,我只需要最低有效位,而不是整数。
这是我写的代码:
add (x:xs) (y:ys) = if x+y > 10 then (x+y):add(xs ys)
else (x+y-10):add(xs ys)
问题在于类型匹配,它给我递归调用的错误。好像无法识别这两个列表。
【问题讨论】:
我正在开发一个从两个列表中逐一添加元素的函数。如果结果大于 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 _ [] = []
【讨论】: