我在假期里花了一点时间在 Haskell 上,但现在我遇到了一个问题。我有一个由布尔值组成的列表,我正在尝试创建一个函数,该函数采用整数列表并在相应位置翻转布尔值。
如果您将以下代码加载到 GHCi 中并尝试运行flipBits testBoard [1,0,2]结果是[True, True, False, False]。如果你用flipBits testBoard [1,2,0]运行它,结果是[True, True, True, False]。
我希望结果不依赖于传递给 FlipBits 的列表中数字的顺序(显然列表中的 0 会停止执行)。我究竟做错了什么?
flipBit board which (x:xs)
| which == 0 = (not (board !! which)):xs
| otherwise = x:(flipBit board (which-1) xs)
flipBits board [] = board
flipBits board (x:xs) = flipBits (flipBit board x board) xs
testBoard = take 4 $ repeat False