이 문제를 수행하고 있지만 완전히 프롤로그에 익숙하지 않으며 어떻게 수행해야할지 모릅니다.제한이있는 보드 조립
전자 보드의 9 개 부분은 정사각형 모양을 가지며 각 부분의 동일한 크기와 각 가장자리에는 문자와 플러스 또는 마이너스 기호가 표시되어 있습니다. 부품은 아래 그림과 같이 완전한 보드로 조립되어야 공통 가장자리가 같은 문자와 반대 기호를 갖게됩니다. 프로그램이 쿼리로 '어셈블'을 수행하고 파트를 어셈블하는 방법, 즉 w.r.t 부분의 위치와 위치를 결정하는 방법을 출력하는 플래너를 작성합니다. 현재 위치를 서로 조화시켜 완벽한 보드를 만들 수 있습니다.
나는 그것을 해결하려고하고 난 다음 절을 작성했습니다 :
이complement(a,aNeg).
complement(b,bNeg).
complement(c,cNeg).
complement(d,dNeg).
complement(aNeg,a).
complement(bNeg,b).
complement(cNeg,c).
complement(dNeg,d).
% Configuration of boards, (board,left,top,right,bottom)
conf(b1,aNeg,bNeg,c,d).
conf(b2,bNeg,a,d,cNeg).
conf(b3,dNeg,cNeg,b,d).
conf(b4,b,dNeg,cNeg,d).
conf(b5,d,b,cNeg,aNeg).
conf(b6,b,aNeg,dNeg,c).
conf(b7,aNeg,bNeg,c,b).
conf(b8,b,aNeg,cNeg,a).
conf(b9,cNeg,bNeg,a,d).
position(b1,J,A).
position(b2,K,B).
position(b3,L,C).
position(b4,M,D).
position(b5,N,E).
position(b6,O,F).
position(b7,P,G).
position(b8,Q,H).
position(b9,R,I).
assemble([A,B,C,E,D,F,G,H,I,J,K,L,M,N,O,P,Q,R]) :-
Variables=[(A,J),(B,K),(C,L),(D,M),(E,N),(F,O),(G,P),(H,Q),(I,R)],
all_different(Variables),
A in 1..3, B in 1..3, C in 1..3, D in 1..3, E in 1..3,
F in 1..3, G in 1..3, H in 1..3, I in 1..3, J in 1..3,
K in 1..3, L in 1..3, M in 1..3, N in 1..3, O in 1..3,
P in 1..3, Q in 1..3, R in 1..3,
% this is where I am stuck, what to write next
나는 그들이 올바른 경우에도 모르는 내가 해결하기 위해 더 이상 진행하는 방법을 잘 모르겠습니다을 이 문제. CLP와 간이
귀하의 변수 이름은 의미-그들은뿐만 아니라 말할 수 있습니다 예를 들어, 'position (b1, _, _).'당신이이''1..3' 변수를 위해 필요한 것을 모릅니다. 아마도 '회전/2'술어가 다음에 회전 할 수있는 세 가지 다른 방법으로 'conf/5'구성 요소의 극을 회전시키고 싶습니다. 아마도 구성 요소 격자에서 호환성을 테스트하기위한 조건자를 원할 것입니다 이웃 레벨 또는 전 세계적으로. –
'all_different/1'은'(',')/2'-pairs의 목록이 아닌 변수 목록을 기대합니다. – false
내가 이것을 게시 한 이유는 이미 가지고있는 코드를 수정하는 방법을 알려줘야하기 때문입니다. 그리고 그것을 끝내는 방법. @ DanielLyons, 나는 보드를 3x3 그리드로 모델링했는데, 이것은 1..3을위한 것입니다. 조각에 대한 X, Y 좌표. – Wajahat