在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

这本质上是与“删除中间元素”相同的问题,本质上是与“删除中间元素”相同的问题。