2012-04-30 5 views
0

프롤로그에서 형식 조합 (3, [a, b, c, d], L)의 인수를 사용하는 함수를 정의하려고 할 때 결과가 반환됩니다 다음과 같이프롤로그 - 주어진 목록에 k 개의 숫자 조합을 작성하십시오.

L=a,b,c 
L=a,b,d 
L=a,c,d 
L=b,c,d 

내 구현은 다음과 같이

combination(K,argList,L):- 
unknown(X,argList,Y), 
Z is select(X,argList), 
length(Z,K), 
L is Z, 
combination(K,Z,L). 

unknown(X,[X|L],L). 
unknown(X,[_|L],R) :- unknown(X,L,R). 

알 수없는 술어는 동작 : [1]

도와주세요 [여기 이미지에 대한 설명을 입력]!.

+0

어떤 Prolog를 사용하고 있습니까? –

+0

SWI - 프롤로그 편집기 – Basmah

답변

0

unknown/3의 당신의 정의를 이용하여 마음에 오는 간단한 해결 방법은 다음과 같습니다

combination(0, _, []) :- 
    !. 
combination(N, L, [V|R]) :- 
    N > 0, 
    NN is N - 1, 
    unknown(V, L, Rem), 
    combination(NN, Rem, R). 

unknown(X,[X|L],L). 
unknown(X,[_|L],R) :- 
    unknown(X,L,R). 

설명 : combination/3의 두 번째 절은 술어 unknown/3는 선형에서와 목록 L에서 요소를 선택 보인다 방식으로, 나머지를 반환, Rem. 목록 L에서 선택된 요소 수가 N을 초과하면 분기를 종료하는 기본 사례가 트리거됩니다 (첫 번째 절인 combination/3). combination/3의 정의는 대체 목록 요소를 선택하기위한 선택 지점을 남기는 unknown/3의 비 결정적 특성에 의존합니다.

+0

백 트랙킹을 사용하는 솔루션입니까? 그렇지 않다면 백 트랙킹을 사용하여 어떻게 해결할 수 있습니까? – KFC

관련 문제