让NODE是一个在其闭包中带有STORE的函数。图的所有叶子的STORE均为单个值(常量或变量),所有内部节点的STORE均为包含以下内容的列表:
假设[[[(NODE f)]] = [[(f STORE)]] >>如果f是一个过程,而STORE是NODE闭包中的STORE。
我试图找到一种遍历这棵树并打印可以用(eval)求值的表达式的方法。我已经接近了,但是我无法使它正常工作。
这是我的代码:
(define repr (lambda(store) (if (is_leaf? store) store (list (car store) (repr_helper (cadr store) repr))))) (define repr_helper (lambda(f_list arg) (cond ((null? f_list) '()) (else (cons ((car f_list) arg) (repr_helper (cdr f_list) arg))))))
简单的例子:假设一棵树仅添加了4个参数(创建一个带有4个子节点的+节点,所有子节点都是叶子)。
((Add 10 'x 'y 'z) repr)
输出:
'(+(10 x y z))。
预期输出:'(+ 10 x y z)
如您所见,问题来自表达式内多余的括号。您可以想象,对于更复杂的示例,情况甚至更糟。我知道我在哪里创建列表以及为什么有括号,但是我似乎找不到找到将其删除,正确打印值的方法。
让NODE是一个在其关闭时带有STORE的函数。图的所有叶子的STORE均为单个值(常量或变量),所有内部节点的STORE均为列表...
尝试修改构建列表的部分,如下所示:
(define repr
(lambda (store)
(if (is_leaf? store)
store
(cons (car store)
(repr_helper (cadr store) repr)))))