Заявление о проблеме для меня непонятно. Если то, что вы хотите иметь
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): - append (B, A, C) .'? И для вашего «Давать мне результат, как ...» вы не сказали, какие были исходные данные. Так что это немного неясно. – lurker