:- use_module(library(lists)). rpn(num(X), [X]). rpn(exp(Op, V1, V2), Code) :- rpn(V1, Code1), rpn(V2, Code2), append(Code1, Code2, Code3), append(Code3, [Op], Code).