Давайте рассмотрим следующий код пролога, который позволяет мне формировать деревья выражений:
plus(_,_).
eval(A, A) :- number(A).
eval(plus(A, B), R) :- eval(A, A_R), eval(B, B_R), R is A_R+B_R.
Я могу легко определить и оценить деревья выражений следующим образом:
eval(plus(1,2), R).
, который оценивается как
R=3
Некоторые языки позволяют нам строить деревья выражений, а затем присваивать их переменной, чтобы их можно было потом использовать.В псевдокоде:
my_expr = plus(plus(1, 2), 3)
Мне интересно, смогу ли я с моим текущим представлением дерева достичь аналогичного результата?Я хотел бы иметь список с различным деревом выражений в каждом узле.Что-то вроде
[ plus(1, 2), plus(3,plus(2,1)), 3 ]