1

これが深度プログラム用のものですが、最大関数なしでそれを行う方法 (define、lambda、quote (')、car、cdr、cons、cond、eq?、および equal? のみを使用)?

(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)(if bool then (if bool then ( id = id + id ))(id = const / const)(id = id + id))(while bool (id = id - const )(id = id - id)))

出力する必要があります: maximumdepth: 2

4

1 に答える 1

1

さて、あなたはいつでもあなた自身を実装してmy-max、組み込みのmax手順の代わりにそれを使うことができます:

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

最大深度を見つけるには、基本的に同じ比較を何らかの方法で行う必要があります。したがって、ヘルパー手順にリファクタリングしても問題ありません。比較をインライン化するのは良い考えではないことに注意してください。これは、再帰呼び出しを2回評価する必要があるためです。つまり、ヘルパープロシージャを使用することをお勧めしmaxますmy-max

また、コードでは2回目の呼び出しmaxは不要です。値が1つしかない場合、なぜ最大値を見つける必要があるのでしょうか。

于 2012-12-03T03:39:15.937 に答える