gpt4 book ai didi

list - 如何将 Prolog 中的列表拆分为包含 3 个项目的多个列表?

转载 作者:行者123 更新时间:2023-12-05 00:34:58 25 4
gpt4 key购买 nike

我的问题是,我想制定一个规则,将一个列表拆分为多个列表,按顺序仅包含原始列表中的 3 个项目。

例如:

/*original list:*/ 
Fruits=[apple,banana,orange,pear, lemon, melon]

?-Split(Fruits).

/*results:*/
[apple,banana,orange];
[banana,orange,pear];
[orange,pear,lemon];
[pear,lemon,melon].

有什么办法吗? :S

最佳答案

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

再见

最好的问候

关于list - 如何将 Prolog 中的列表拆分为包含 3 个项目的多个列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10041043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com