私はsqueen.icl
のコードから試してみます。 BoardSize :== 11
で試しても問題ありません。しかし、12
に変更すると、出力は[
になります。どうして?それを修正するには?N-Queensのサンプルプログラムの奇妙な出力
module squeen
import StdEnv
BoardSize :== 12
Queens::Int [Int] [[Int]] -> [[Int]]
Queens row board boards
| row>BoardSize = [board : boards]
| otherwise = TryCols BoardSize row board boards
TryCols::Int Int [Int] [[Int]] -> [[Int]]
TryCols 0 row board boards = boards
TryCols col row board boards
| Save col 1 board = TryCols (col-1) row board queens
| otherwise = TryCols (col-1) row board boards
where queens = Queens (row+1) [col : board] boards
Save::!Int !Int [Int] -> Bool
Save c1 rdiff [] = True
Save c1 rdiff [c2:cols]
| cdiff==0 || cdiff==rdiff || cdiff==0-rdiff = False
| otherwise = Save c1 (rdiff+1) cols
where cdiff = c1 - c2
Start::(Int,[Int])
Start = (length solutions, hd solutions)
where solutions = Queens 1 [] []
実際にありがとうございます。 –
@samaこの回答では不正確になりました。厳密性アナライザが認識していないのは、単に「長さ」です'hd'より前に評価されています.2つの内容を反転すると、私は更新された答えでこれを詳しく説明します。 – Keelan