2016-10-07 122 views
3

我是一個新的學習者prolog。這是我們研討會的問題,我不知道從哪裏開始。 真的很感謝任何幫助。prolog謂詞[sublist(Xs,Ys)]

子列表(XS,YS)

這適用時X 5是含有一些伊蘇的元件,在它們出現在列表伊蘇相同的順序列表。這應該工作,只要Ys是一個正確的列表。例如:

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])應該有八個解決方案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.