问题陈述对我来说还不清楚。如果你想要的是有
revappend([1,2] , [3,4] , L) .
产品,为您的例子显示:
L = [3,4,1,2]
的解决方案很简单:
revappend(Xs , Ys , Zs) :- append(Ys,Xs,Zs) .
如果你不想,还是可以的不使用,内置append/3
,你可能会这样做:
revappend([] , [] , []) .
revappend(Xs , [Y|Ys] , [Y|Zs]) :- revappend(Xs , Ys , Zs) .
revappend([X|Xs] , [] , [X|Zs]) :- revappend(Xs , [] , Zs) .
然而,当我听到像您的问题声明,但:
我试图扭转列表的顺序和追加他们。
我希望你
revappend([1,2] , [3,4] , L) .
会产生两种L = [2,1,4,3]
或L = [4,3,2,1]
。
对于前者([2,1,4,3]
)的情况下,你可能会写这样的事情:
revappend(Xs, Yz , Zs) :- revappend(Xs,Yz,[],Zs) .
revappend([] , [] , Zs , Zs) .
revappend([X|Xs] , Ys , Rs , Zs) :- revappend(Xs,Ys,[X|Rs],Zs).
revappend([] , [Y|Ys] , Rs , Zs) :- revappend([],Ys,[Y|Rs],Zs).
对于后者([4,3,2,1]
),你只需要改变了一点东西,修改沿着这些线路revappend/4
:
revappend([] , [] , Zs , Zs) .
revappend(Xs , [Y|Ys] , Rs , Zs) :- revappend(Xs,Ys,[Y|Rs],Zs).
revappend([X|Xs] , [] , Rs , Zs) :- revappend(Xs,[],[X|Rs],Zs).
注意,您可以用内置插件也这么做:
revappend(Xs,Ys,Zs) :-
reverse(Xs,X1) ,
reverse(Ys,Y1) ,
append(X1,Y1,Zs)
.
revappend(A,B,C)有什么问题: - 追加(B,A,C)。而对于你的“给我的结果就像......”你没有说出输入是什么。所以这有点不清楚。 – lurker 2014-12-03 17:12:40