gpt4 book ai didi

list - 在 Prolog 中查找所有列表旋转

转载 作者:行者123 更新时间:2023-12-01 12:41:50 25 4
gpt4 key购买 nike

我正在尝试在 Prolog 中生成所有可能的列表轮换。这是一个例子:

rotate([1,2,3], X).
X = [1,2,3];
X = [2,3,1];
X = [3,1,2].

我找到了一个旋转的方法:

rotate([H|T], R) :-
append(T, [H], R).

但是如何找到所有的呢?

回答

rotate(L, R) :-
append(Left, Right, L),
append(Right, Left, R),
Right \= [].

最佳答案

您可以使用 append/3 谓词将列表拆分为前缀和后缀。例如:

?- append(Prefix, Suffix, [1,2,3]).
Prefix = [],
Suffix = [1, 2, 3] ;
Prefix = [1],
Suffix = [2, 3] ;
Prefix = [1, 2],
Suffix = [3] ;
Prefix = [1, 2, 3],
Suffix = [] ;
false.

然后,将后缀附加到前缀会给你一个轮换:

| ?- append(_Prefix, _Suffix, [1,2,3]), append(_Suffix, _Prefix, Rotation).

Rotation = [1,2,3] ? ;
Rotation = [2,3,1] ? ;
Rotation = [3,1,2] ? ;
Rotation = [1,2,3]
yes

但是有一个多余的解决方案。你能摆脱它吗?提示:如果前缀或后缀为空列表,您将获得原始列表。

关于list - 在 Prolog 中查找所有列表旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23711935/

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