0
我正在製作一個簡單的井字遊戲來學習Haskell。在板的每個單元具有任一玩家值(X或O)或位置值,如果正方形是空的(字母AI,使得:列表理解中的數據類型轉換(Haskell)
A|B|C
D|E|F
G|H|I
)
首先,我已經創建一個簡單的功能需要一塊空板(看起來像上面那個)和一個字符串(一個字母「A」到「I」),並返回一個輸入字母被替換爲「X」的板。所以,如果我打電話newBoard blankBoard "C"
,我希望它可以返回:
A|B|X
D|E|F
G|H|I
如果我想保持Square
數據類型,因爲它是,我怎麼能做出這樣的代碼工作:
data Square = A | B | C | D | E | F | G | H | I | X | O deriving (Read)
instance Show Square where
show A = "A"
show B = "B"
show C = "C"
show D = "D"
show E = "E"
show F = "F"
show G = "G"
show H = "H"
show I = "I"
type Board = [[Square]]
blankBoard :: Board
blankBoard = [[A,B,C],[D,E,F],[G,H,I]]
newBoard :: Board -> String -> Board
newBoard board letter = [[ if show sq == letter then X else sq | sq <- row ]| row <- board]
我得到這個錯誤,而且不知道爲什麼:
[[*** Exception: myfunctions.hs:(386,3)-(394,14): Non-exhaustive patterns in function show
您正試圖在X或O上使用show,這是您尚未定義的內容。是否有一個原因,你不只是使用'派生Show'爲你的廣場? – JHobern
這樣做的竅門,謝謝!我沒有意識到X被顯示。 –
啓用警告會在編譯時發現此錯誤。 – chi