問題陳述對我來說還不清楚。如果你想要的是有
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