Ivan Bratko 책에서 프롤로그를 공부 중입니다. 인공 지능 프로그래밍과 책에서 을 사용하는이 8 버전의 퀸즈 문제를 발견했습니다. I라고 생각Prolog에서 공간 상태 "그래프"를 사용하는 8 개의 퀸 솔루션이 작동하지 않습니다.
s(Queens, [Queen|Queens]) :- member(Queen, [1,2,3,4,5,6,7,8]),
noattack(Queen, Queens).
goal([_,_,_,_,_,_,_,_]).
noattack(_,[],_).
noattack(Y,[Y1|Ylist],Xdist) :-
Y1-Y =\= Xdist,
Y-Y1 =\= Xdist,
Dist1 is Xdist + 1,
noattack(Y,Ylist,Dist1).
solve(N,[N]) :- goal(N).
solve(N, [N|Sol1]) :- s(N,N1),
solve(N1,Sol1).
그것은 (그 noattack/3 관계를 사용한다) 순열에 기초하여 8 퀸즈 과제 해결을 결합하고 /2 술어 : 스페이스 상태 "그래프" 문제를 해결 가능한 후계 국가 상태 (내 그래프의 노드)를 구축하십시오.
의 (ActualState, SuccessorState)
난 단지 내가 정확히 8 여왕을 배치 할 필요가 지정 있다고 생각 목표/1 조건 : 그래서 내가 좋아하는 뭔가가있다.
이 책에서이 쿼리를 실행하면 해결 ([], 솔루션)이 증가하고 퀸즈 수가 증가하는 보드 위치 목록이 생성되며이 목록은 8 명의 여왕의 안전한 구성으로 끝나게됩니다. .
하지만이 작동하지 않습니다이 쿼리를 실행하려고 나는이 출력 얻을 것이다 경우 : 바르게, 라인 2에서 호출 된 noattack 술어 만이 매개 변수를 사용하기 때문에
?- solve([],Solution).
ERROR: s/2: Undefined procedure: noattack/2
ERROR: However, there are definitions for:
ERROR: noattack/3
을하지만, noattack 술어에는 3 개의 매개 변수가 있어야합니다 ... 책의 bue가이 잘못된 방식으로 제공되며이 문제를 어떻게 해결할 수 있는지 모르겠습니다 ...
왜? 내가 뭘 놓치고 있니?
, 당신은 당신이 입력 한 확신 그게 정확히 있니? (나는 거의 확신하지 못했다.) –
나는 TYPO 오류를 수정했지만 지금은 다른 문제가있다 ... 불행히도이 책에서 주어진 해결책이 잘못되었거나 완료되지 않은 것 같다. – AndreaNobili