Syntax 使用集合元素?

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

目前我正试图在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 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