List Prolog反转列表的前成员

List Prolog反转列表的前成员,list,prolog,reverse,List,Prolog,Reverse,在Prolog中,我必须在给定编号(列表成员)的情况下反转列表的一部分,直到列表反转为止。 例如: ?-反向前(2,[3,2,4,1,5,6],L)。 L=[2,3,4,1,5,6] 编号2(包括2)之前的列表被颠倒,然后追加到剩余的列表中 -前向反转(4,[9,3,2,4,1,5],L)。 L=[4,2,3,9,1,5] ?-反向前(1,[3,2,4,1,6,5],L)。 L=[1,4,2,3,6,5] 该解决方案可以使用reverse/2和append/3完成 你知道怎么做吗?是的,你可以使

在Prolog中,我必须在给定编号(列表成员)的情况下反转列表的一部分,直到列表反转为止。 例如:

?-反向前(2,[3,2,4,1,5,6],L)。 L=[2,3,4,1,5,6]

编号2(包括2)之前的列表被颠倒,然后追加到剩余的列表中

-前向反转(4,[9,3,2,4,1,5],L)。 L=[4,2,3,9,1,5]

?-反向前(1,[3,2,4,1,6,5],L)。 L=[1,4,2,3,6,5]

该解决方案可以使用reverse/2和append/3完成


你知道怎么做吗?

是的,你可以使用
reverse/2
append/3
来实现这一点

大概是这样的:

reverse_front(Item, List, NList):-
  append(L1, [Item|L2], List),
  reverse(L1, RL1),
  append([Item|RL1], L2, NList).
样本运行:

?- reverse_front(4,[9,3,2,4,1,5],L).
L = [4, 2, 3, 9, 1, 5] ;
false.

?- reverse_front(1,[3,2,4,1,6,5],L).
L = [1, 4, 2, 3, 6, 5] ;
false.