List 在Prolog中每隔一秒反转一次列表

List 在Prolog中每隔一秒反转一次列表,list,recursion,prolog,reverse,List,Recursion,Prolog,Reverse,我有一个包含列表的列表,我想在其中每秒钟反转一次列表。我尝试了一些东西,但如果列表中的元素数为奇数,则最后一个列表元素将丢失。。。因此,最好的解决方案是将奇数列表放在第一位,偶数列表放在第二位,直到每秒钟列表都被颠倒 我不能使用任何图书馆。我需要递归地执行,或者拆分它们并再次追加它们。到目前为止,我做的最好的事情是只反转第一个偶数列表,并将第一个奇数和偶数列表附加到一个新列表中 我试着这样做: reverselist(列表,[List])。 反向列表([X,Y | Rest],[SnakeLis

我有一个包含列表的列表,我想在其中每秒钟反转一次列表。我尝试了一些东西,但如果列表中的元素数为奇数,则最后一个列表元素将丢失。。。因此,最好的解决方案是将奇数列表放在第一位,偶数列表放在第二位,直到每秒钟列表都被颠倒

我不能使用任何图书馆。我需要递归地执行,或者拆分它们并再次追加它们。到目前为止,我做的最好的事情是只反转第一个偶数列表,并将第一个奇数和偶数列表附加到一个新列表中

我试着这样做:

reverselist(列表,[List])。
反向列表([X,Y | Rest],[SnakeList | Rest2]):-
附加(X,[],奇数),
反向(Y、EvenList),
附加(奇数、偶数、蛇列表),
反向列表(Rest,Rest2)。
这是:

reverselist(列表1、列表2)。
反向列表([H | Ts],[奇数| R]):-
不是(0是H模2),
附加(H,[],奇数),
反向列表(Ts,R)。
反向列表([H | Ts],[偶数| R]):-
0是H mod 2,
反向(H,偶数),
反向列表(Ts,R)。
示例查询:

?-反向列表([[a,b,c],[d,a,b],[c,d,o],[b,c,d],[e,e,d]],列表)。
我希望结果是:

List=[[a,b,c],[b,a,d],[c,d,o],[d,c,b],[e,e,d]]。

我们需要创建另一个带有一个以上参数的谓词,以跟踪奇数或偶数位置:

reverselist(InList,OutList):- reverselist(InList,OutList, 0).

reverselist([],[],_). %base case
%case of even position
reverselist([H|T],[H|T1], 0):- reverselist(T,T1,1).
%case of odd position
reverselist([H|T],[H1|T1], 1):- reverse(H1,H), reverselist(T,T1,0).

我们需要创建另一个带有多个参数的谓词,以跟踪奇数或偶数位置:

reverselist(InList,OutList):- reverselist(InList,OutList, 0).

reverselist([],[],_). %base case
%case of even position
reverselist([H|T],[H|T1], 0):- reverselist(T,T1,1).
%case of odd position
reverselist([H|T],[H1|T1], 1):- reverse(H1,H), reverselist(T,T1,0).

您还可以编写相互递归:

reverselist([],[]).
reverselist([H|T],[H|T1]):-reverselist2(T,T1).

reverselist2([],[]).
reverselist2([H|T],[H1|T1]):-reverse(H,H1), reverselist(T,T1).

您还可以编写相互递归:

reverselist([],[]).
reverselist([H|T],[H|T1]):-reverselist2(T,T1).

reverselist2([],[]).
reverselist2([H|T],[H1|T1]):-reverse(H,H1), reverselist(T,T1).

你和你的第一个变种非常接近

而不是你的

reverselist(列表,[List])。
反向列表([X,Y | Rest],[SnakeList | Rest2]):-
附加(X,[],奇数),
反向(Y、EvenList),
附加(奇数、偶数、蛇列表),
反向列表(Rest,Rest2)。
只要把它调整一下就行了

反向列表([],[])。%附加条款
反向列表([列表],[列表])。
反向列表([X,Y | Rest],[X,EvenList | Rest2]):-
反向(Y、EvenList),
反向列表(Rest,Rest2)。
所有三个条款都是相互排斥的,它们一起是详尽无遗的,即它们涵盖了所有可能性


我相信这个定义是对你的问题最直接、最接近的描述。在Prolog中,表述问题意味着有解决方案。

您与第一个变体非常接近

而不是你的

reverselist(列表,[List])。
反向列表([X,Y | Rest],[SnakeList | Rest2]):-
附加(X,[],奇数),
反向(Y、EvenList),
附加(奇数、偶数、蛇列表),
反向列表(Rest,Rest2)。
只要把它调整一下就行了

反向列表([],[])。%附加条款
反向列表([列表],[列表])。
反向列表([X,Y | Rest],[X,EvenList | Rest2]):-
反向(Y、EvenList),
反向列表(Rest,Rest2)。
所有三个条款都是相互排斥的,它们一起是详尽无遗的,即它们涵盖了所有可能性


我相信这个定义是对你的问题最直接、最接近的描述。在Prolog中,表述问题意味着有解决问题的方法。

Man真的非常感谢您!我试图做一些类似循环的事情,将1添加到一个数字中,并使用mods找出哪个列表是奇数和偶数,但我失败了!男人真的真的真的谢谢你!我试图做一些类似循环的事情,将1添加到一个数字中,并使用mods找出哪个列表是奇数和偶数,但我失败了!“最直接的”,不。奇数元素两次指定为
List
X
“最直接”,不适用。奇数元素两次指定为
List
X