在Prolog中创建表达式树列表 让我们考虑下面的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.

在Prolog中创建表达式树列表 让我们考虑下面的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.,prolog,expression-trees,Prolog,Expression Trees,我可以通过以下方式轻松定义和计算表达式树: eval(plus(1,2), R). 评估结果是 R=3 有些语言允许我们构建表达式树,然后将它们分配给变量,以便以后使用。在伪代码中: my_expr = plus(plus(1, 2), 3) 我想知道我目前的树表示法是否能够达到类似的结果?我希望在每个节点中都有一个包含不同表达式树的列表。类似于 [ plus(1, 2), plus(3,plus(2,1)), 3 ] 以你为例 my_expr = plus(plus(1, 2), 3)

我可以通过以下方式轻松定义和计算表达式树:

eval(plus(1,2), R).
评估结果是

R=3
有些语言允许我们构建表达式树,然后将它们分配给变量,以便以后使用。在伪代码中:

my_expr = plus(plus(1, 2), 3)
我想知道我目前的树表示法是否能够达到类似的结果?我希望在每个节点中都有一个包含不同表达式树的列表。类似于

[ plus(1, 2), plus(3,plus(2,1)), 3 ]
以你为例

my_expr = plus(plus(1, 2), 3)
不能这样做b/c=的左侧和右侧不匹配。如果我的_expr是一个变量(大写),这将是真的,并将导致我的_expr绑定到树加号(加号(1,2),3)。看看这个-

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

Times2 = 12
My_expr是一个完全合法的结构,您可以将其放入列表或调用下游表达式

以你为例

my_expr = plus(plus(1, 2), 3)
不能这样做b/c=的左侧和右侧不匹配。如果我的_expr是一个变量(大写),这将是真的,并将导致我的_expr绑定到树加号(加号(1,2),3)。看看这个-

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

Times2 = 12
My_expr是一个完全合法的结构,您可以将其放入列表或调用下游表达式