如何编写Scheme(R5RS语言)程序来计算最大深度(不使用max函数)?

时间:2012-12-03 03:33:50

标签: scheme racket r5rs

这是我对深度程序的看法,但是没有max函数怎么做(只使用define,lambda,quote('),car,cdr,cons,cond,eq?等于?)?

(define depth
     (lambda (expr)
        (cond ((null? expr) 0) 
              ((list? (car expr)) 
               (max (+ 1 (depth (car expr))) (depth (cdr expr)))) 
              ((null? (cdr expr))0) (max (depth (cdr expr))))))

输入:((id = id + id)(如果bool那么(如果bool然后(id = id + id))(id = const / const)(id = id + id))(而bool(id = id - const)(id = id - id)))

应输出:maximumdepth:2

1 个答案:

答案 0 :(得分:1)

好吧,您可以随时实施自己的my-max并使用它而不是内置的max程序:

(define (my-max a b)
  (if (> a b) a b))

为了找到最大深度,您必须以某种方式进行基本相同的比较 - 因此可以将其重构为辅助程序。请注意,对比内联并不是一个好主意,因为这需要对递归调用进行两次评估 - 最好坚持使用帮助程序,无论是max还是my-max。 / p>

此外,您的代码中不需要第二次调用max - 如果只有一个值,为什么需要找到最大值?