我在假期中花費了一點時間在Haskell上,但現在我遇到了一個問題。我有一個由布爾值組成的列表,並且我正在試圖創建一個函數,該函數需要一個整數列表並在相應的位置翻轉布爾值。結果取決於列表的順序,即使它不應該
如果您加載下面的一段代碼到GHCI並嘗試運行flipBits測試臺[1,0,2]結果是[真,真,假,假]。如果用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
謝謝你,那是從我身邊一個大錯。同樣感謝你對foldr的評論,我還在開始學習摺疊,所以我很感激它。 – DkM