如何评估作为符号返回的过程



我们正在处理我的类中的数据表示,我们必须将整数表示为diff树。对于- 0 ?在课堂上,我想对微分树求值看看结果是否为0。然而,我所有的过程返回符号。我不知道如何让Scheme计算程序。

diff-tree::= (one) | (diff -tree diff-tree)

(diff (one)) = (diff (one)(one))

如果我有(is-zero? (predecessor '(one))) |注意:它必须把它作为符号

的值为(is- 0 ?"(diff(一)(一)))怎样才能把diff作为函数来求值呢?我已经有了(define diff -) (define (one) 1)所以如果我只运行(diff (one)(one))

所有其他函数,如前身函数,必须返回一个符号。

我不太擅长解释,但我希望我已经做得足够好,让人们理解。

注意:我创建了另一个函数,递归地遍历diff树并对其求值。它不像我想的那么好,但它会工作的。

(define evaluate
  (lambda (dt)
    (if (eqv? (car dt) 'diff)
        (- (evaluate (cadr dt))(evaluate (caddr dt)))
        1
        )))
(define is-zero?
  (lambda (dt)
    (if (= 0 (evaluate dt))
        #t
        #f
     )))

这是一个草图,不能使用Scheme编译器:).

(define (list-eval l)
  (apply (car l) (map list-eval (cdr l))))
(define (is-zero? l)
  (= 0 (list-eval l)))

在我看来,这个任务的想法是让你要么开发一个差分树的解释器,要么(考虑到规范的"有趣")开发对树执行代数操作的函数,以保持"意义"。"

假设只写一个返回整数的解释器是可以的——这显然是你的想法——你需要开发一个直接的(从适当的http章节)"在一段自我引用的复合数据(即diff树)上的函数"。首先为"interpret"函数选择一个名称和契约。那么,一些测试用例呢?

最新更新