Prolog 非常适合这项任务。只需观察 append/3 可以在各个方向使用:
% append(+List,+List,-List)
% append(-List,-List,+List)
append([], X, X).
append([X|Y], Z, [X|T]) :-
append(Y, Z, T).
现在简单地定义 split/2 如下。它将找到 _1 和 _2 使得 L = _1 ++ S ++ _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
再见
最好的祝福