turn \ 3将两个列表作为输入,原始列表和切换开关。当元素是切换的成员时,它将颠倒之后所有元素的顺序。我想知道如何反转列表的一部分顺序,该顺序由一组特定元素的切换确定。例如:
?- turn([1,2,3,4,5],[3],L).
L = [3, 2, 1, 4, 5].
?- turn([1,b,3,5,hello,5,7,z],[5,b,a],L).
L = [b, 1, 3, 5, 5, hello, 7, z].
这是我目前拥有的东西,但是它似乎与我想要的相反,因为它通常会启动列表,然后反转后续元素。
turn([],_,[]).
turn([H|T], L2, L) :-
( member(H, L2) ->
L = [Reversed|H],
reverse(Ln, Reversed),
turn(T,L2, Ln);
L = [H|L1],
turn(T, L2, L1)).
输出为:
?- turn([1,2,3,4,5],[3], L).
L = [1,2,3,5,4].