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).