序言非常適合這項任務。只觀察/ 3可在各種方向上使用 該追加:
% append(+List,+List,-List)
% append(-List,-List,+List)
append([], X, X).
append([X|Y], Z, [X|T]) :-
append(Y, Z, T).
現在簡單地定義分裂/ 2如下。它會找到_1和_2,使得L = _1 ++小號++ _2,其中++是連接列表:
% split(+List,-Sublist)
split(L, S) :-
append(_, H, L),
append(S, _, H).
在這裏,你與你的問題:
?- Fruits=[apple,banana,orange,pear,lemon,melon], Split=[_,_,_], split(Fruits,Split).
Fruits = [apple,banana,orange,pear,lemon,melon],
Split = [apple,banana,orange] ;
Fruits = [apple,banana,orange,pear,lemon,melon],
Split = [banana,orange,pear] ;
Fruits = [apple,banana,orange,pear,lemon,melon],
Split = [orange,pear,lemon] ;
Fruits = [apple,banana,orange,pear,lemon,melon],
Split = [pear,lemon,melon] ;
No
再見
最好的問候
如果列表的長度小於3,結果應該是什麼?你有什麼版本的Prolog? – 2012-04-06 08:35:58
它應該是False/No。 我有SWI 5.10.5 – 2012-04-06 08:55:32