2016-10-07 2 views
3

저는 프롤로그를위한 새로운 학습자입니다. 여기 워크숍에 대한 질문입니다. 어디에서 시작해야할지 모르겠습니다. 정말 어떤 도움을 주시면 고맙겠습니다.prolog predicate [sublist (Xs, Ys)]

하위 목록 (X가, Ys 일)

개의 X들이 Ys 일리스트에 나타나는 순서에의 Y 원소의 일부를 포함하는리스트 인 경우이 보유하고있다. 이것은 Y가 적절한 목록 일 때마다 작동합니다. 예 :

sublist([a,c,e],[a,b,c,d,e])을 성공해야합니다.

sublist([a,e,c],[a,b,c,d,e])은 실패해야합니다.

sublist([a,X,d],[a,b,c,d,e])은 X = b 및 X = c의 두 솔루션을 가져야합니다.

sublist(X,[a,b,c])은 8 개의 솔루션이 있어야합니다. X=[]; X=[c]; X=[b];X=[b,c]; X=[a]; X=[a,c]; X=[a,b];X=[a,b,c].

+4

(http://stackoverflow.com/a/20251636/772868). – false

답변

3

내 구현 :

sublist([], []). 
sublist([H| Rest1], [H| Rest2]) :-sublist(Rest1, Rest2). 
sublist(H, [_ | Rest2]) :-sublist(H, Rest2). 

예 :이에게 [시퀀스]를 호출하는 것이 더 일반적이다

?- sublist(X,[a,b,c]). 
X = [a, b, c] ; 
X = [a, b] ; 
X = [a, c] ; 
X = [a] ; 
X = [b, c] ; 
X = [b] ; 
X = [c] ; 
X = []. 

?- sublist([a,c,e],[a,b,c,d,e]) . 
true ; 
false. 

?- sublist([a,e,c],[a,b,c,d,e]) . 
false. 

?- sublist([a,X,d],[a,b,c,d,e]). 
X = b ; 
X = c ; 
false.