【发布时间】:2020-09-13 18:41:41
【问题描述】:
我第一次使用方案,并且由于某种原因我试图获得树的产品,当运行我的程序时,我收到了这个错误: 1 ]=>(产品 t1)
;对象()不适用。 ;要继续,请使用选项号调用 RESTART: ; (RESTART 2) => 指定一个程序来代替它。 ; (RESTART 1) => 返回到 read-eval-print 级别 1。
这是我的代码:
(define (node x l r) ; x is data, l is left, r is right
(lambda (s)
(cond ((= s 0) x)
((= s 1) l)
((= s 2) r)
(#t 'error))))
(define (data t) (t 0))
(define (left t) (t 1))
(define (right t) (t 2))
(define (size t) (if null? t) 0 (+ 1 (size (left t)) (size (right t))))
(define (product t) (if null? t) 0 ( * (data t)(product(left t)) (product (right t))))
(define t1 (node 5 (node 3 '() '()) (node 8 (node 7 '() '()) '())))
【问题讨论】:
-
为什么将节点表示为
lambda?使用列表会容易得多。 -
我认为学习使用 lambda 表示数据是非常宝贵的经验。对于特定的用例,有更合适的数据结构,例如列表,但 lambdas 足够通用,您可以使用它来建模任何东西,而无需了解任何专门的结构。
标签: scheme binary-tree