Scheme 计算树方案中的重复值

Scheme 计算树方案中的重复值,scheme,Scheme,我正在尝试计算树中的重复项。我正在附上一张照片以便更好地说明。我走错了路,我没有地方可去。 这就是我所做的 (define (arbre-insere valeur arbre) (cond ((null? arbre) (list (cons valeur 1) '() '())) ((< valeur(car arbre)) (list (cons (car arbre) count)

我正在尝试计算树中的重复项。我正在附上一张照片以便更好地说明。我走错了路,我没有地方可去。 这就是我所做的

(define (arbre-insere valeur arbre) 
  (cond ((null? arbre) (list (cons valeur 1) '() '())) 
            ((< valeur(car arbre)) 
                (list (cons  (car arbre) count) 
                      (arbre-insere valeur (cadr arbre)) 
                                       (caddr arbre))) 
            (> valeur(car arbre) (list cons ((car arbre) count) (cadr arbre) 
                  (arbre-insere valeur (caddr arbre) )))
            (else

             )
            ))][1]
(定义(arbre insere valeur arbre)
(cond((null?arbre)(列表(cons valeur 1)’())
(valeur(car arbre)(列表cons(car arbre)计数)(cadr arbre)
(arbre insere valeur(caddr arbre)))
(其他
)
))][1]

这是一张草图,
..
中的内容将由您填写

(define leaf '())

; leaf? : tree -> boolean
;   return #t if the tree is a leaf,
;          #f otherwise
(define (leaf? tree)
  (null? leaf?))

; value : tree -> element
;   return the root element of the tree
(define (value tree) 
  ...)

; count : tree -> integer
;   return the count of the root element of tree
(define (count tree)
  ...)

; left : tree -> tree
;   return the left subtree of tree
(define (left tree)
  ...)

; right : tree -> tree 
;   return the right subtree of tree
(define (right tree)
  ...)

; make-node : value integer tree tree
;   construct tree from a value and count, 
;   left is a tree whose elements are smaller than value
;   right is a tree whose elements are greater than value
(define (make-node value count left right)
  (list left (cons value count) right))

; tree-insert : value tree -> tree
(define (tree-insert v t)
  (cond
    [(leaf? t)        (make-tree v 1 leaf leaf)]
    [(= v (value t))  (make-tree v <old-count+1> (left t) (right t))]
    [(< v (value t))  (make-tree v (make-node (value t) (count t) 
                                              (insert-tree v (left t)) r))]
    [(> v (value t))  <???>]
    [else (error 'tree-insert "an unexpected error occurred")]))
(定义叶'())
; 叶子?:树->布尔
;   return#t如果树是一片叶子,
;          #f否则
(定义(叶?树)
(空?叶?)
; 值:树->元素
;   返回树的根元素
(定义(值树)
...)
; 计数:树->整数
;   返回树的根元素的计数
(定义(计数树)
...)
; 左:树->树
;   返回树的左子树
(定义(左树)
...)
; 右:树->树
;   返回树的右子树
(定义(右树)
...)
; 生成节点:值整数树
;   从值和计数构造树,
;   左边是一个元素小于value的树
;   右侧是元素大于值的树
(定义(使节点值左右计数)
(左列表(cons值计数)右)
; 树插入:值树->树
(定义(树插入v t)
(续)
[(叶子?t)(使树变为1片叶子)]
[(=v(值t))(使树v(左t)(右t))]
[(v(值t))]
[否则(错误“树插入”发生意外错误]))

你们对法语过敏吗Darbre=tree,insere=insert,valeur=value您使用哪种约定构建树?叶子是什么样子的?内部节点是什么样子的?它是一个二叉树。在这种情况下,一个叶子将是一个空列表,内部节点只是根中的所有数字——所有向下的叶子。如果它不能正确回答您的问题,我很抱歉:(仅数字”到底是什么意思?我在您的示例中看到了(14.1)。14是什么意思?1是什么意思?14和1都是元素吗?非常感谢您的回答。但是为什么您要测试树是否为空,然后再测试它是否为叶(我认为叶也是空列表)