将两个列表作为Haskell中的参数传递

问题描述 投票:1回答:1

我正在研究一个功能,该功能一个接一个地添加两个列表中的元素。如果结果大于10,则只需要最低有效位,而不是整数。

这是我写的代码:

add (x:xs) (y:ys) = if x+y > 10 then (x+y):add(xs ys)
                     else (x+y-10):add(xs ys)

问题在于类型匹配,它在递归调用时给我错误。似乎无法识别这两个列表。

list recursion add
1个回答
1
投票

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 _ [] = []
© www.soinside.com 2019 - 2024. All rights reserved.