/*
Feladat: hogyan lehet egy 4-szer 4-es saktáblán elhelyezni
négy királynőt úgy, hogy ne üssék egymást.
(Alapfeladat: igazi sakktáblán 8 királynő.)


FONTOS MEGJEGYZÉSEK:

1. NE szokjon hozzá, hogy konkrét adatokkal ír programot!!!
Ezt a példát csak szemléltetés kedvéért mutatom meg, 
ügyesebben (és elegánsabban, jobban) is megoldható, ha
általánosan fogalmazzuk meg a táblára pakolás szabályát.

(A member beépített eljárást nézze meg a help-ben.)


2. Ezt a feladatot nem igazán így kellene megoldani, bár így 
is lehet. Nem feltétlenül kellene azonban ráerőltetni az általános
keresési eljárást, meg lehet írni egy ennél sokkal rövidebb,
tömörebb (és ezért hatékonyabb) programot is közvetlenül 
ennek a feladatnak a megoldására.

*/


:- module(kiralynok,[el/2]).


/* Egy modul definiálásakor fel kell sorolni az átadandó predikátumokat. 
   Ezeket majd közvetlenül is el lehet érni, a többit csak a modul nevének megadásával.
*/


el(tabla(0,0,0,0),tabla(X,0,0,0)) :- member(X,[1,2,3,4]).

el(tabla(X,0,0,0),tabla(X,Y,0,0)) :- member(Y,[1,2,3,4]), 
			      X=\=Y, abs(X-Y)=\=1.

el(tabla(X,Y,0,0),tabla(X,Y,Z,0)) :- member(Z,[1,2,3,4]), 
			      X=\=Z, abs(X-Z)=\=2,
			      Y=\=Z, abs(Y-Z)=\=1.

el(tabla(X,Y,Z,0),tabla(X,Y,Z,Q)) :- member(Q,[1,2,3,4]), 
			      X=\=Q, abs(X-Q)=\=3,
			      Y=\=Q, abs(Y-Q)=\=2,
			      Z=\=Q, abs(Z-Q)=\=1.


/*
Hívás (a konzultáció során :)) :
 ose(tabla(0,0,0,0),tabla(A,B,C,D)),A\=0,B\=0,C\=0,D\=0.

(vagyis, az első, második, stb. sor hanyadik mezőjére kerüljön a bábu)

Próbálja ki a melysegi-vel is.
*/