Ich habe eindimensionale Array, die Schachtisch bedeutet. Ich würde gerne alle Positionen finden, die Ritter angreifen könnte. Zum Beispiel 3x3 Schachtisch haben (K ist Ritter, X Position Angriff):Prolog, Ritter Angriff
---------------
| X | | |
---------------
| | | K |
---------------
| X | | |
---------------
und für diese Tabelle, die ich in Prolog-Programm möchte Array haben:
-------------------------------------
| X | | | | | K | X | | |
-------------------------------------
Ich möchte universelles Programm für alle Fälle zu schreiben - 3x3 Tisch, 4x4, 5x5, usw.
ich habe versucht:
control(Table, N, Pos, NewTable) :- insert(Table, Pos, 'k' , TempTable1, 1),
insert(TempTable1, Pos-N*2+1, 'x' , TempTable2, 1),
insert(TempTable2, Pos-N*2-1, 'x' , TempTable3, 1),
insert(TempTable3, Pos-N +2, 'x' , TempTable4, 1),
insert(TempTable4, Pos-N -2, 'x' , TempTable5, 1),
insert(TempTable5, Pos+N*2+1, 'x' , TempTable6, 1),
insert(TempTable6, Pos+N*2-1, 'x' , TempTable7, 1),
insert(TempTable7, Pos+N +2, 'x' , TempTable8, 1),
insert(TempTable8, Pos+N -2, 'x' , NewTable, 1).
Dort N - ist Tischgröße (3), Pos - Ritterposition. Die „Einfügen“ ist in Ordnung, aber „Kontrolle“ nicht ordnungsgemäß funktioniert:
?- control([0,0,0,0,0,0,0,0,0], 3, 6, R).
R = [x, 0, 0, 0, x, k, x, 0, 0].
R = [x, 0, 0, 0, 0, k, x, 0, 0]
sein sollte.
Irgendwelche Ideen, wie "Kontrolle" Prädikat zu ändern?
Ich denke, das wird viel einfacher, wenn Sie die Tabelle als 2d-Array modellieren und X- und Y-Koordinaten an "control" übergeben. – Cephalopod