转谓词;如何将反向元素的子列表追加到列表中?

时间:2019-03-22 17:02:53

标签: prolog

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].

0 个答案:

没有答案