Оценка списка выражений Postfix

Я написал программу для рекурсивной оценки выражения после исправления в прологе из списка выражений. Например, дан следующий список:

[+,1,2]

Он должен возвращать 3. Они построили мой предикат так, как он рекурсивно вызывает себя, пока не достигнет конца списка, чтобы он считывал значения в обратном направлении. (так же, как чтение этого списка слева направо: [2,1, +]).

Моя проблема в том, что когда я пытаюсь вернуть более одного значения через рекурсивные вызовы, все значения внезапно исчезают.

Вот's код:

eval_list([Head|Tail],_,Result):-
   Tail==[], % last element of list
   Result=Head,
   write(Head),
   write(' was stored in Result!\n').

eval_list([Head|Tail],Store1,Result):-
      eval_list(Tail,Store2, NewResult),
      (\+integer(Store2))
   ->
      % if no integer is bound to Store2, bind Store1 to Head
      Store1=Head,
      Result is NewResult,
      write(Head),
      write(' is stored value!\n')
   ;  (integer(Store2)) ->
    % if an integer is bound to store2, we perform operation specified by the Head with the stored number
      X is Store2+NewResult,
      Result is X,
      write('performed operation!\n')
   ;
      % if doesnt catch either of these states the program is broken
      (  print('something broke\n'),
         print(Store1),
         nl,
         print(Store2),
         nl,
         print(Head),
         nl,
         print(Result),
         nl
      ).

Я получаю следующий вывод:

?- eval_list([+,1,2],X,Result).
2 was stored in Result!
1 is stored value!
something broke
_G1162
_L147
+
_G1163
true.

Я неЯ не понимаю, почему мои значения исчезают, или есть лучший способ оценить список.

Ответы на вопрос(1)

Ваш ответ на вопрос