【发布时间】:2011-11-17 05:36:28
【问题描述】:
我们在课堂上处理数据表示,我们必须将整数表示为差异树。对于我的零?我想实际评估差异树以查看它是否为 0。但是我的所有程序都返回符号。我不知道如何让 Scheme 评估程序。
差异树 ::= (一) | (diff diff-tree diff-tree)
(前身'(一)) = (diff(一)(一))
所以如果我有(is-zero? (predecessor '(one))) |注意:它必须把它当作一个符号
它将评估为 (is-zero? '(diff (one)(one))) 我如何得到它以便我可以实际评估差异作为一个函数? 我已经有 (define diff -) (define (one) 1) 所以如果我只是运行 (diff (one)(one))
所有其他函数,例如前置函数,都必须返回一个符号。
我不太擅长解释,但我希望我做得足够好让人们理解。
注意:我创建了另一个函数,它递归地遍历差异树并对其进行评估。它没有我想要的那么好,但它会起作用。
(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