基本的な関数のみを使用して Haskell の 8-queens 問題を解決して
います。これはコードです。
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 || length xs == 0 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)(tail xs)(1)
else True
クイーンが同じ行にないことを関数がチェックすることを明確にするために、SafeH
H は Horizantly を表し、SafeD
は斜めの競合をチェックすることになっています。関数は問題なく問題ないと
確信しており
、コードをコンパイルすると問題は発生しませんが、呼び出し時に
このエラーが表示される関数:SafeH
SafeD
queens
[1 of 1] Compiling Main ( y.hs, interpreted )
Ok, modules loaded: Main.
*Main> queens
*** Exception: Prelude.last: empty list
誰でも私を助けてもらえますか?? すべてのことを前もって感謝します:)