Haskell整数不充当整数

时间:2019-04-21 18:28:29

标签: haskell variable-assignment

所以我正在定义一个变量/函数,它接受两个输入并显示一系列的1和0

bin 0 0 = '0'
bin 0 1 = '1'
bin 0 2 = '1'
bin 0 3 = '0'
bin 0 4 = '1'

现在我想创建一个bin变量的副本,只是在0 3处应该有一个1,所以我试图在一个新函数中实现这一点

changeBin w z = binNew where 
                binNew w z = '1'
                binNew x y = bin x y

但是,如果我这样做,它会给我一个模式匹配冗余警告,当我调用changeBin 0 3时会进入循环,但是当我将函数更改为

changeBin w z = binNew where 
                binNew 0 3 = '1'
                binNew x y = bin x y

这行得通,但是我想用第一种方法来做,所以我可以随时更改它而无需编写整个函数,但是我不知道为什么当我只用它能工作的数字写相同的代码时,它给我一个冗余错误

我是haskell的新手,谢谢

感谢我对第一个功能的错误的任何帮助

1 个答案:

答案 0 :(得分:7)

1 changeBin w z = binNew where 
2                 binNew w z = '1'
3                 binNew x y = bin x y

第1行的w和第2行的w是不同的变量。第2行上的w不会成为仅在与第1行上的w具有相同值时才匹配的模式–而是定义了一个新变量,该变量将旧变量覆盖。您需要明确比较:

changeBin w z = binNew
    where
    binNew w' z' 
        | w' == w && z' == z = '1'
        | otherwise = bin x y