% L11 Kohl, Ziege, Wolf


eats(ziege,kohl).
eats(wolf,ziege).
	
ko(List) :-
	 member(X,List), member(Y,List), eats(X,Y).


start(fluss([bauer,kohl,wolf,ziege],[])).
	
kante(fluss(L,R),fluss(NL,NR)) :- valid(L,R),move(L,R,NL,NR).
kante(fluss(L,R),fluss(NL,NR)) :- valid(L,R),move(R,L,NR,NL).

:- use_module(library(lists)).

valid(L,R) :- append(L,R,[A,B,C,D]), perm([bauer,kohl,wolf,ziege],[A,B,C,D]).


move(L,R,NewL,NewR) :- select(bauer,L,NewL), \+ ko(NewL), NewR=[bauer|R].
move(L,R,NewL,NewR) :- select(bauer,L,LL),
	select(X,LL,NewL), \+ ko(NewL),
	sort([bauer,X|R],NewR).

ziel(fluss([],[bauer,kohl,wolf,ziege] )).

	
