0

我正在尝试实现一个比较 2 个列表以查看它们是否相同的函数。语法对我来说很好:

compare :: String -> String -> Bool

    compare [] [] = True -- error here
    compare (x,xs) (y,ys) = if x == y
        then compare xs ys
        else False

但我在上面标记的行中不断收到此错误:

输入中的语法错误(意外的 `=')

当我尝试将 '=' 替换为 '->' 时,它运行良好,但在下一行中给出了相同的错误。所以我做了同样的事情:

compare :: String -> String -> Bool

        compare [] [] -> True
        compare (x,xs) (y,ys) -> if x == y -- new error here
            then compare xs ys
            else False

但我得到了一个不同的错误:

类型签名中的语法错误(意外的关键字“if”)

现在我真的不知道发生了什么。

4

1 回答 1

4

您最初的第一个功能是正确的,只是您的模式匹配错误。它应该是这样的:

compare (x:xs) (y:ys)    -- Not compare (x,xs) (y,ys)

同样正如@ThreeFx 建议的那样,请正确格式化您的代码。最终它应该是这样的:

compare :: String -> String -> Bool
compare [] [] = True 
compare (x:xs) (y:ys) = if x == y
                        then compare xs ys
                        else False
于 2014-11-21T22:11:36.050 回答