Syntax 使用集合元素?
目前我正试图在Scheme中对二叉树进行数据抽象。我正在学习SICP课程,正在研究二叉树的实现,但我不确定如何使用它Syntax 使用集合元素?,syntax,scheme,sicp,Syntax,Scheme,Sicp,目前我正试图在Scheme中对二叉树进行数据抽象。我正在学习SICP课程,正在研究二叉树的实现,但我不确定如何使用它 ;; Abstraction barrier (define (make-tree entry left right) (list entry left right)) (define (entry tree) (car tree)) (define (left-branch tree) (cadr tree)) (define (right-branch
;; Abstraction barrier
(define (make-tree entry left right)
(list entry left right))
(define (entry tree)
(car tree))
(define (left-branch tree)
(cadr tree))
(define (right-branch tree)
(caddr tree))
这本书介绍了集合元素?程序:
(define (element-of-set? x set)
(cond ((null? set) #f)
((= x (entry set)) #t)
((< x (entry set))
(element-of-set? x (left-branch set)))
((> x (entry set))
(element-of-set? x (right-branch set)))))
下面,我想检查1是否是集合(我的树)的成员:
这样做会产生以下错误:
mcar: contract violation
expected: mpair?
given: 1
检查1是否为成员的正确语法是什么
提前谢谢 问题在于构建树的方式,左侧和右侧节点也必须是树(本例中为叶子)。这是构建树的正确方法:
(define my-tree (make-tree 5
(make-tree 1 '() '())
(make-tree 9 '() '())))
现在谓词起作用了:
(element-of-set? 1 my-tree)
=> #t
问题在于构建树的方式,左侧和右侧节点也必须是树(本例中为叶子)。这是构建树的正确方法:
(define my-tree (make-tree 5
(make-tree 1 '() '())
(make-tree 9 '() '())))
现在谓词起作用了:
(element-of-set? 1 my-tree)
=> #t