这是以下问题:
对于这个问题,我们考虑二叉表达式树,其叶子要么是tree(empty, Num, empty)
Num 是数字的形式,要么tree(empty, z, empty)
在这种情况下我们会将字母 z 视为一种“变量”。
每棵树要么是叶子,要么是tree(L, Op, R)
L 和 R 是左子树和右子树的形式,Op 是算术运算符“+”、“-”、“*”、“/”之一(表示加法、减法、乘法和除法)。
编写一个谓词tree_eval(Value, Tree, Eval)
,将 Eval 绑定到表达式树树的计算结果,变量 z 设置为等于指定的值。例如:
?- tree_eval(2, tree(tree(empty,z,empty),
'+',tree(tree(empty,1,empty),
'/',tree(empty,z,empty))), Eval).
Eval = 2.5 ;
false.
?- tree_eval(5, tree(tree(empty,z,empty),
'+',tree(tree(empty,1,empty),
'/',tree(empty,z,empty))), Eval).
Eval = 5.2 ;
false.
一些好主意?
我们可以在不使用 cut(!) 的情况下实现它吗?
多谢你们!