여기서 두 개의 연속 값 사이의 절대 차이를 갖는 n, n + 1, ... 2 * n-1의 순열 목록을 생성하는 프롤로그 구현을 만들고 싶습니다 < = 2. 예 : n=4
의 경우 순열을 만드는 목록은 [4,5,6,7]
이고 유효한 순열은 [5,4,6,7]
이고 유효하지 않은 것은 [7,4,6,5]
이 될 수 있습니다. 왜냐하면 7-4 is 3
이 있기 때문입니다. 문제는 다음과 같은 오류가 나타납니다. clauses for the same predicate should be grouped
. 나는 wrong..Please 나에게동일한 술어에 대한 절을 그룹화해야 함
domains
el=integer
list=el*
lista=list*
predicates
perm(list,list)
permutations(integer,list)
delete(integer,list,list)
generate(integer,lista)
create(integer,list)
create_list(integer,integer,list)
permutations_aux(integer,list)
diff(list,integer).
clauses
create(N,L):-
M = 2*N,
create_list(N,M,L).
create_list(N,M,[N|R]):-
N<M,
N1=N+1,
create_list(N1,M,R).
create_list(M,M,[]).
perm([],[]).
perm(Y,[A|X]):-
delete(A,Y,Y1),
perm(Y1,X).
delete(A,[A|X],X).
delete(A,[B|X],[B|Y]):-
delete(A,X,Y).
permutations(N,X):-
create(N,X1),
perm(X1,X).
diff(X,2).
permutations_aux(N,X):-
permutations(N,X).
diff([],_).
diff([_],_).
diff([X,Y|T],M):-
abs(Y-X) <=M,!,
diff([Y|T],M).
generate(N,R):-
findall(X,permutations_aux(N,X),R).
goal
generate(4,P),
write(P).
오, 나는 믿을 수 없다. 얼마나 어리석은 지 .. 감사합니다 – user3043278
아, 몇 번 해봤습니다. 이제 오류를 보았으므로 처음 확인한 것 중 하나가됩니다. :) – lurker