Scheme racket-生成二叉树中的操作数

Scheme racket-生成二叉树中的操作数,scheme,lisp,binary-tree,racket,Scheme,Lisp,Binary Tree,Racket,我正在尝试编写一个函数,它使用一个二叉树并生成其中的操作总数。我的尝试是检查参数是否是数字,如果是,则将总数加1 有人能帮我写代码吗 (define-struct binode (op arg1 arg2)) (define (count-ops bin-exp) (cond [(number? bin-exp) 1] [(binode? bin-exp) (+ (count-ops (binode-arg1 bin-exp)) (count-ops

我正在尝试编写一个函数,它使用一个二叉树并生成其中的操作总数。我的尝试是检查参数是否是数字,如果是,则将总数加1

有人能帮我写代码吗

(define-struct binode (op arg1 arg2))
(define (count-ops bin-exp)
  (cond
    [(number? bin-exp) 1]
    [(binode? bin-exp)
     (+ (count-ops (binode-arg1 bin-exp))
        (count-ops (binode-arg2 bin-exp)))]))
测试:


函数生成的不是预期结果,而是4

您的答案非常接近!你只需要修正基本情况:当我们达到一个数字时,我们应该加零,而不是一:我们计算的是运算符的数量,而不是操作数的数量

相反,在递归的情况下,我们必须添加一个:如果我们到达递归步骤,那是因为我们在一个操作符上,而这些是我们想要计算的。这就是我的意思:

(define-struct binode (op arg1 arg2))

(define (count-ops bin-exp)
  (cond
    [(number? bin-exp) 0]
    [(binode? bin-exp)
     (+ 1 (count-ops (binode-arg1 bin-exp))
          (count-ops (binode-arg2 bin-exp)))]
    [else (error "Invalid input:" bin-exp)]))
它按预期工作:

(count-ops (make-binode '+ 4 (make-binode '- 5 (make-binode '+ 3 2))))
=> 3

你的答案太接近了!你只需要修正基本情况:当我们达到一个数字时,我们应该加零,而不是一:我们计算的是运算符的数量,而不是操作数的数量

相反,在递归的情况下,我们必须添加一个:如果我们到达递归步骤,那是因为我们在一个操作符上,而这些是我们想要计算的。这就是我的意思:

(define-struct binode (op arg1 arg2))

(define (count-ops bin-exp)
  (cond
    [(number? bin-exp) 0]
    [(binode? bin-exp)
     (+ 1 (count-ops (binode-arg1 bin-exp))
          (count-ops (binode-arg2 bin-exp)))]
    [else (error "Invalid input:" bin-exp)]))
它按预期工作:

(count-ops (make-binode '+ 4 (make-binode '- 5 (make-binode '+ 3 2))))
=> 3

测试用例?123测试用例?123 cond应具有默认大小写。cond应具有默认大小写。