Найти все перестановки чисел 1, 2, 3, 4 и 5, в которых ни одно число не стоит на своём месте - Prolog

Формулировка задачи:

Найдите все перестановки чисел 1, 2, 3, 4 и 5, в которых ни одно число не стоит на своём месте. Для этого напишите программу. Как сделать можно? Очень буду благодарен

Код к задаче: «Найти все перестановки чисел 1, 2, 3, 4 и 5, в которых ни одно число не стоит на своём месте - Prolog»

textual
find_all_perm(L, Res) :-
    findall( L1, (permutation(L, L1), not_in_place(L1)), Res ),
    forall( member(X, Res), writeln(X) ).
 
not_in_place(L) :-
    not_in_place(L, 1).
    
not_in_place([], _).
not_in_place([H|T], N) :-
    not(H = N),
    N1 is N + 1,
    not_in_place(T, N1).

9   голосов, оценка 3.778 из 5


СОХРАНИТЬ ССЫЛКУ