Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 例外:前奏曲。最后:哈斯凯尔解决8皇后的空列表?_Haskell_Functional Programming_N Queens - Fatal编程技术网

Haskell 例外:前奏曲。最后:哈斯凯尔解决8皇后的空列表?

Haskell 例外:前奏曲。最后:哈斯凯尔解决8皇后的空列表?,haskell,functional-programming,n-queens,Haskell,Functional Programming,N Queens,我正在解决Haskell中的8皇后问题,只使用基本函数,没有什么特别的 代码如下: 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]

我正在解决Haskell中的8皇后问题,只使用基本函数,没有什么特别的
代码如下:

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

谁能帮帮我吗??提前感谢您所做的一切:)

您可以通过在调用
last
之前检查
xs
的长度来解决眼前的问题:

safeD l e xs n = if length xs == 0 || last(xs)/=e then ...
但是,您将遇到另一个问题,因为您在
内调用
safeD(tail-xs)(head-xs)(tail-xs)(1)
,然后调用该分支的
部分,当
长度xs==0时,您可以访问该分支的
然后
部分

我强烈建议学习一点关于模式匹配(,)的知识,并尝试编写整个代码段,而不要调用
head
tail
init
last
length
。相反,将两种模式
[]
用于匹配空列表,将
(x:xs)
(或类似模式)用于匹配以
x
开头并以
xs
结尾的列表;如有必要,可以偶尔调用
reverse


祝你好运,让我们知道你的遭遇和你被困的地方

您可以通过在调用
last
之前检查
xs
的长度来解决眼前的问题:

safeD l e xs n = if length xs == 0 || last(xs)/=e then ...
但是,您将遇到另一个问题,因为您在
内调用
safeD(tail-xs)(head-xs)(tail-xs)(1)
,然后调用该分支的
部分,当
长度xs==0时,您可以访问该分支的
然后
部分

我强烈建议学习一点关于模式匹配(,)的知识,并尝试编写整个代码段,而不要调用
head
tail
init
last
length
。相反,将两种模式
[]
用于匹配空列表,将
(x:xs)
(或类似模式)用于匹配以
x
开头并以
xs
结尾的列表;如有必要,可以偶尔调用
reverse


祝你好运,让我们知道你的遭遇和你被困的地方

有没有想过先为零皇后解决这个问题

那么一个女王呢


然后找出归纳/递归模式?。。我没有引用三行解决方案,因为它看起来像你的家庭作业。

有没有想过先为零皇后解决这个问题

那么一个女王呢


然后找出归纳/递归模式?。。我不是在引用三行解决方案,因为它看起来像你的家庭作业。

你与MHD有关系吗?也许是走同样的路?这看起来很像。@JoachimBreitner是的,先生,我们是一个试图解决这个问题的团队,但他不知道该问谁这个问题??你和MHD有关系吗?也许是走同样的路?这看起来很像。@JoachimBreitner是的,先生,我们是一个试图解决这个问题的团队,但他不知道该问谁这个问题??