この関数は終了していません! 8 x 8 のチェス盤で 8 つのクイーンに対して、考えられるすべての安全な組み合わせを生成しようとしています。何が問題なのかわかりません。私のコードは以下です。ボードは [x1, x2...x8] として表されます。ここで、値 xi は列であり、その値のインデックスは行です。
safeH 関数は、[1,4,3,5,8,6,7,2],[6,4,8,2,5,1,3,7] のように、8 つの数値のすべての組み合わせを重複なく作成する必要があります。等々...
safeD 関数は、最初の要素をすべての後続要素と比較して、このクイーン (この要素) の対角線上に配置されたクイーンがないことを確認します。
queens = [ [x1,x2,x3,x4,x5,x6,x7,x8] | x1 <- [1..8], x2 <- [1..8]
, x3 <- [1..8], x4 <- [1..8]
, x5 <- [1..8], x6 <- [1..8]
, x7 <- [1..8], x8 <- [1..8]
, safeH [x2,x3,x4,x5,x6,x7,x8] x1
, safeD [x2,x3,x4,x5,x6,x7,x8] x1
[x1,x2,x3,x4,x5,x6,x7,x8] 1 ]
safeH l e =
if elem e l then False
else if length (l)/=0 then safeH(tail l)(head l)
else True
safeD l e xs n =
if last xs /= e then
if length l /= 0 then
if head l + n == e || head l - n == e then False
else safeD (tail l) e xs (n + 1)
else safeD (tail xs) (head xs) xs 1
else True