我们正在处理类中的数据表示,我们必须将整数表示为diff树。我的归零? class我想实际评估diff-tree以查看它是否为0.但是我的所有过程都返回符号。我不知道如何让Scheme评估程序。
diff-tree :: =(one)| (diff diff-tree diff-tree)
(前身'(一))=(差异(一)(一))
所以,如果我有(is-zero? (predecessor '(one)))
|注意:它必须将其作为符号
它会评估为(is-zero?'(diff(one)(one))) 我怎么得到它,以便我可以实际评估差异作为一个函数? 我已经(定义diff - )(定义(一)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
)))
答案 0 :(得分:0)
这是一个草图,无法访问Scheme编译器:)。
(define (list-eval l)
(apply (car l) (map list-eval (cdr l))))
(define (is-zero? l)
(= 0 (list-eval l)))
答案 1 :(得分:0)
我确信这个任务的想法是为你开发一个diff-trees的解释器或者(给出规范的“有趣的”)来开发在树上执行代数操作的函数,以保存“意“。
假设只编写一个返回整数的解释器是可以的 - 这显然是你想到的 - 你需要开发一个直截了当的(来自适当的HtDP章节)“函数一段自引用复合数据“(即你的差异树)。首先选择“解释”功能的名称和合同。那么,一些测试用例呢?