【发布时间】:2019-12-16 08:31:51
【问题描述】:
我有一个包含列表的列表,我想反转其中的每个第二个列表。我尝试了一些方法,但是如果列表中有奇数个元素,则最后一个列表元素将丢失……因此,最好的解决方案是将奇数列表放在首位,将偶数列表放在第二位,直到每隔一个列表反转。
我不能使用任何库。我需要递归地执行或拆分它们并再次附加它们。到目前为止,我所做的最好的事情是只反转第一个偶数列表并将第一个奇数和偶数列表附加到一个新列表中。
我尝试过这样做:
reverselist(List, [List]).
reverselist([X,Y|Rest], [SnakeList|Rest2]):-
append(X, [], Odd),
reverse(Y, EvenList),
append(Odd, EvenList, SnakeList),
reverselist(Rest, Rest2).
还有这个:
reverselist(List1, List2).
reverselist([H|Ts], [Odd|R]):-
not(0 is H mod 2),
append(H, [], Odd),
reverselist(Ts, R).
reverselist([H|Ts], [Even|R]):-
0 is H mod 2,
reverse(H, Even),
reverselist(Ts, R).
示例查询:
?- reverselist([[a,b,c],[d,a,b],[c,d,o],[b,c,d],[e,e,d]], List).
我希望结果是:
List = [ [a,b,c],[b,a,d],[c,d,o],[d,c,b],[e,e,d] ].
【问题讨论】:
标签: list recursion prolog reverse