所以我正在定义一个变量/函数,它接受两个输入并显示一系列的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的新手,谢谢
感谢我对第一个功能的错误的任何帮助
答案 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