Ich mache dieses Problem, aber ich bin völlig neu in Prolog und ich habe keine Ahnung, wie es geht.Board Assembly mit Einschränkungen
Neun Teile einer elektronischen Platine haben eine quadratische Form, die gleiche Größe und jeder Rand jedes Teils ist mit einem Buchstaben und einem Plus- oder Minuszeichen gekennzeichnet. Die Teile müssen zu einer vollständigen Platine zusammengebaut werden, wie in der Abbildung unten gezeigt, so dass die gemeinsamen Kanten den gleichen Buchstaben und die entgegengesetzten Zeichen haben. Schreiben Sie einen Planer in Prolog, so dass das Programm "assemble" als die Abfrage ausführt und ausgibt, wie die Teile zusammengesetzt werden, d. H. Die Positionen und Positionen der Teile bestimmen wr.t. die aktuellen Positionen so, dass sie zusammenpassen, um das komplette Brett zu machen.
Ich habe versucht, es zu lösen, und ich habe die folgenden Klauseln geschrieben:
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
Ich weiß nicht einmal, ob sie richtig sind, und ich bin nicht sicher, wie weiter zu verfahren ist zu lösen dieses Problem.
Ihre Variablennamen in Ihrer 'Position/3' Fakten sind bedeutungslos sie auch mögen sagen, zB 'Position (b1, _, _).' Nicht sicher, wofür diese '1..3' Variablen benötigt werden. Ich würde wahrscheinlich ein 'rotate/2'-Prädikat als nächstes haben, das die Pole der' conf/5'-Komponenten um drei verschiedene Arten rotiert, die sie gedreht werden können, und ich würde wahrscheinlich ein Prädikat für die Kompatibilität testen wollen, entweder im Komponentenraster Nachbarstufe oder global. –
'all_different/1' erwartet eine Liste von Variablen, nicht eine Liste von' (',')/2'-Paaren – false
Das ist der Grund, warum ich dies auf SO gepostet habe, du musst mir Anweisungen geben, wie ich den Code korrigieren kann und wie man es beendet. @DanielLyons, ich habe das Board als 3x3-Raster modelliert, für das 1..3 steht. X, Y Koordinaten für Stücke. – Wajahat