witam,
mam problem nie tyle z samym algorytmem, co ze środowiskiem (eclipse z obsługą prologa).

Nie wiem dlaczego, ale poniższe rozwiązania:

przypadek 1.

generuj(R) :-
	permutacja([1, 2, 3, 4, 5, 6, 7, 8], R).

permutacja([], []).
permutacja(L1, [I | L2]) :-
	select(I, L1, L3),
	permutacja(L3, L2).


sprawdz(R) :-
	\+ zla(R).

zla(R) :-
	append(_, [Ri | L1], R),
	append(L2, [Rj | _], L1),
	length(L2, K),
	abs(Ri-Rj) =:= K+1.

przypadek 2.

nHetmanow(N,X):-
	mozliwe_ustawienia_w_pionie(N,X),
	sprawdz_bicie(X).
mozliwe_ustawienia_w_pionie(N,X):-
	ciag_testowy(N,B),
	permutation(B,X).
ciag_testowy(0,[]).
ciag_testowy(N,[N|Xt]):-
	N > 0,
	Nt is N - 1,
	ciag_testowy(Nt,Xt).
sprawdz_bicie([]).
sprawdz_bicie([X|Xt]):-
	sprawdz_bicie_przekatna(X,Xt,1),
	sprawdz_bicie(Xt).
sprawdz_bicie_przekatna(_,[],_).
	sprawdz_bicie_przekatna(X,[Y|Yt],Nt) :-
	X =\= Y + Nt,
	X =\= Y - Nt,
	sprawdz_bicie_przekatna(X,Yt,Nt + 1).

nie działają.
Generalnie chodzi o to, że przy wpisywaniu komendy

przypadek 1.

?- generuj(X), sprawdz(X).

lub

przypadek 2.

?- nHetmanow(8,X).

zawsze zwraca wartość:
no

a powinno wypisać wszystkie spełniające warunki permutacje.

Algorytmy są dobre, bo skopiowane z przykładowych rozwiązań (i u autorów działają w obydwu przypadkach).