【发布时间】:2018-05-23 15:10:29
【问题描述】:
我想用算术运算符作为符号来评估一棵树。所以一棵树是:
(define-struct op-tree (op left right))
left 和 right 可以是数字也可以是 ' 运算符。到目前为止我所拥有的:
(define (eval-op-tree tree)
(local (
(define (get-root-op i)
(cond
((symbol=? i '+) +)
((symbol=? i '-) -)
((symbol=? i '/) /)
((symbol=? i '*) *)))
(define (get-info i)
(cond
((number? i) i)
((symbol=? '+ (op-tree-op i)) (+ (get-info (op-tree-left tree)) (get-info (op-tree-right tree))))
((symbol=? '- (op-tree-op i)) (- (get-info (op-tree-left tree)) (get-info (op-tree-right tree))))
((symbol=? '* (op-tree-op i)) (* (get-info (op-tree-left tree)) (get-info (op-tree-right tree))))
((symbol=? '/ (op-tree-op i)) (/ (get-info (op-tree-left tree)) (get-info (op-tree-right tree)))))))
(cond
((not (symbol? (op-tree-op tree))) "root has to be an op")
(else
((get-root-op (op-tree-op tree)) (get-info (op-tree-left tree)) (get-info (op-tree-right tree)))))))
这似乎适用于(make-op-tree 'any-operator any-number any-number,但不适用于长度大于 1 且程序永远运行的树...我做错了什么?
【问题讨论】:
-
寻找你递归到树的各个部分的地方。
标签: functional-programming scheme binary-tree racket