在Prolog列表中反转到中间
我想写一个函数,假设:在Prolog列表中反转到中间,prolog,Prolog,我想写一个函数,假设:half\u reverse(L1,L2)。 此函数将(奇数编号的)列表L1中的元素从1反转为(中间-1)元素,(中间+1)反转为最后一个元素,并将结果存储在L2中 示例: 如果输入:half_reverse([1,2,3,4,5,6,7],L2) 输出将是:L2=[3,2,1,4,7,6,5]Edit:前一种方法太难看了,不能单独使用。但我对这个解决方案不是100%满意 around(Ori,Del):- around(Ori,Ori,Second,First),
half\u reverse(L1,L2)。
此函数将(奇数编号的)列表L1
中的元素从1反转为(中间-1)元素,(中间+1)反转为最后一个元素,并将结果存储在L2
中
示例:如果输入:
half_reverse([1,2,3,4,5,6,7],L2)
输出将是:
L2=[3,2,1,4,7,6,5]
Edit:前一种方法太难看了,不能单独使用。但我对这个解决方案不是100%满意
around(Ori,Del):-
around(Ori,Ori,Second,First),
reverse(First,Tsrif),
append(Tsrif,Second,Del).
around([_],[H|Slow],[H|Wols],[]):-
reverse(Slow,Wols).
around([_,_|Fast],[H|Slow],Part2,[H|Part1]):-
around(Fast,Slow,Part2,Part1).
?- around([1,2,3,4,5,6,7],L).
L = [3, 2, 1, 4, 7, 6, 5]
false
编辑:前一种方法太难看了,不能单独使用。但我对这个解决方案不是100%满意
around(Ori,Del):-
around(Ori,Ori,Second,First),
reverse(First,Tsrif),
append(Tsrif,Second,Del).
around([_],[H|Slow],[H|Wols],[]):-
reverse(Slow,Wols).
around([_,_|Fast],[H|Slow],Part2,[H|Part1]):-
around(Fast,Slow,Part2,Part1).
?- around([1,2,3,4,5,6,7],L).
L = [3, 2, 1, 4, 7, 6, 5]
false
这本质上是与“删除中间元素”相同的问题,本质上是与“删除中间元素”相同的问题。