그래서 내 문제는 이런 소리 : 정수 번호의 목록을 주어, 순열에서 연속 된 값 사이의 차이의 절대 값이 <=3
인 속성을 가진 순열 목록을 생성하십시오. 예 : L=[2,7,5]
==>[[2,5,7], [7,5,2]]
.프롤로그에서 두 연속 요소 사이의 차이
지금까지 나는이
domains
list=integer*
lista=list*
predicates
perm(list,list)
permutations(list,lista,integer)
delete(integer,list,list)
diff(list,integer)
clauses
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).
perm_aux(L,X,3):-
perm(L,X),
diff(X,R),
abs(R)<=3.
diff([],0).
diff(???):-
??????
permutations(L,R,3):-
findall(X,perm_aux(L,X,3),R).
그래서 내가 그 차이를 만드는 부분에 붙어 썼다. 나는 2 개의 연속적인 요소마다 그것을 어떻게하는지 모른다. 도와주세요.
. 쌍을 조합하여 사용하면 연속적이지 않은 숫자에 대해서도 좋은 차이를 얻을 수 있습니다. – user3043278