我想制定一個程序,以確定8x8棋盤的位置是否安全,如果將2個皇后放在棋盤上,可以放置騎士。錯誤:除以零(Haskell)
函數的輸入是[0, 0, 6, 0, 0, 4, 0, 0]
,所以它被稱爲knightPlace [0, 0, 6, 0, 0, 4, 0, 0]
。所有nonzeros都是皇后。
正如您所看到的,列表中的第3和第6個元素是6和4,這導致皇后位於第3列和第6行第6列和第4行(假設您從0,0開始國際象棋棋盤的左下角)。
我的山口和行檢查爲過濾不錯,但我diagCheck帶來了新的錯誤消息:
knightPlace[0, 0, 6, 0, 0, 4, 0, 0]
*** Exception: divide by zero
是否有人可以幫助我嗎?它不應該是0,因爲diagCheck解決了女王和另一個座標的斜率,使之成爲假,因此沒有添加如果斜率== 1或-1
這裏是我使用的代碼:
knightPlace n = makeboard n
where
makeboard n = [(i + 1,j + 1) | i<-[0..(length n -1)], j<-[0..(length n - 1)], colrowcheck n i j]
-- col and row check, if the condition ==FALSE it doesnt get added
colrowcheck n i j = and [(n!!(i) == 0) && n!!(k) /=(j+1)| k<-[0..(length n -1)], not(diagcheck n i j k) ]
-- diagcheck
diagcheck n i j k = ((j+1) - n!!(k)) `div` ((i+ 1) - k) == -1 || ((j+1) - n!!(k)) `div` ((i+1) - k) == 1
爲了使用'div'作爲中綴函數,你必須把它放在反引號中:'(j - n !!(k))\'div \'(i-k)' – user2407038
哇我沒問題,但現在它說我被零除,我會改變相應的問題 – REALLYANGRYSTUDENT
你應該提出一個新的問題,而不是改變這個問題,所以你不要使答案失效。 –