【问题标题】:Passing two lists as arguments in Haskell在 Haskell 中传递两个列表作为参数
【发布时间】: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)

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

【问题讨论】:

    标签: list recursion add


    【解决方案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 _ [] = []
    

    【讨论】:

    • 这就是它的解释方式。现在明白了,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    相关资源
    最近更新 更多