【发布时间】:2013-03-28 13:52:02
【问题描述】:
以下是问题:
对于这个问题,我们考虑二叉表达式树,其叶子的形式要么是 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(!) 来实现它吗?
谢谢大家!
【问题讨论】:
-
家庭作业?到目前为止,您尝试过什么?
标签: prolog artificial-intelligence