在Prolog中创建表达式树列表

时间:2011-10-20 12:00:49

标签: prolog expression-trees

让我们考虑以下prolog代码,它允许我形成表达式树:

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 ]

1 个答案:

答案 0 :(得分:1)

为您的例子

my_expr = plus(plus(1, 2), 3)

你不能这样做b / c左手和右手边的=不匹配。如果my_expr是一个变量(大写),那么这将是真的并且会导致my_expr绑定到树加(加(1,2),3)。看看这个 -

?- My_expr = plus(plus(1, 2), 3), 
   eval(plus(My_expr, My_expr), Times2).

Times2 = 12

My_expr是一个完全合法的结构,可以放入列表或调用下游表达式。