gpt4 book ai didi

prolog - n 皇后解决方案在 Prolog 中不起作用

转载 作者:行者123 更新时间:2023-12-02 11:49:40 26 4
gpt4 key购买 nike

我正在尝试运行 N-Queens Problem‍​..How far can we go? 中的以下代码寻找 n-queens problem 的解决方案:

generate([],_).
generate([H|T],N) :- H in 1..N , generate(T,N).
lenlist(L,N) :- lenlist(L,0,N).
lenlist([],N,N).
lenlist([_|T],P,N) :- P1 is P+1 , lenlist(T,P1,N).

queens(N,L) :-
generate(L,N),lenlist(L,N),
safe(L),!,
labeling([ffc],L).

notattack(X,Xs) :- notattack(X,Xs,1).
notattack(X,[],N).
notattack(X,[Y|Ys],N) :- X #\= Y,
X #\= Y - N,
X #\= Y + N,
N1 is N + 1,
notattack(X,Ys,N1).

safe([]).
safe([F|T]) :- notattack(F,T), safe(T).

我在 Debian-9(稳定)Linux 上安装了 swi-prolog,并且使用命令“swipl -f nqueens.pl”在上面运行。加载时出现错误:

Syntax error: operator expected (probably on 2nd code line)

问题出在哪里以及如何解决?感谢您的帮助。

最佳答案

这个问题实际上提到它是用CLPFD(一个Constraint Logic P编程工具在F无限域上)。您必须导入此库:

<b>:- use_module(library(clpfd)).</b>

generate([],_).
generate([H|T],N) :- H in 1..N , generate(T,N).
lenlist(L,N) :- lenlist(L,0,N).
lenlist([],N,N).
lenlist([_|T],P,N) :- P1 is P+1 , lenlist(T,P1,N).

queens(N,L) :-
generate(L,N),lenlist(L,N),
safe(L),!,
labeling([ffc],L).

notattack(X,Xs) :- notattack(X,Xs,1).
notattack(X,[],N).
notattack(X,[Y|Ys],N) :- X #\= Y,
X #\= Y - N,
X #\= Y + N,
N1 is N + 1,
notattack(X,Ys,N1).

safe([]).
safe([F|T]) :- notattack(F,T), safe(T).

然后它就可以工作,并产生例如:

?- queens(5,L).
L = [1, 3, 5, 2, 4] ;
L = [1, 4, 2, 5, 3] ;
L = [2, 4, 1, 3, 5] ;
L = [2, 5, 3, 1, 4] ;
L = [3, 1, 4, 2, 5] ;
L = [3, 5, 2, 4, 1] ;
L = [4, 1, 3, 5, 2] ;
L = [4, 2, 5, 3, 1] ;
L = [5, 2, 4, 1, 3] ;
L = [5, 3, 1, 4, 2].

关于prolog - n 皇后解决方案在 Prolog 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46151226/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com