1

私はlet-formからunmedprocedureformに変換しようとしていますが、コツをつかむことができません。

letの手順はこれです。

(define max-recursive (lambda (lst)
      (if  (null? (cdr lst))
           (car lst)
           (let ((m0 (car lst))
                 (m1 (max-recursive (cdr lst))))
                 (if (> m0 m1)
                     m0
                     m1
                 )
           )
      )))

そして私がこれまでにやったことはこれです

(define max-recursive (lambda (lst)
      (if  (null? (cdr lst))
        (car lst)
((lambda (m0 m1)
   (if (> m0 m1)
       m0
       m1
      )
   )
   car lst (max-recursive (cdr lst)))
      )))

助けていただければ幸いです。

4

1 に答える 1

4

あなたはほとんどそれを手に入れました!式の周りの括弧が 2 つだけ欠けていましたcar lst。これを試して:

(define max-recursive
  (lambda (lst)
    (if (null? (cdr lst))
        (car lst)
        ((lambda (m0 m1)
           (if (> m0 m1)
              m0
              m1))
         (car lst) ;here was the error
         (max-recursive (cdr lst))))))

解説は以下の通り。letこのようなフォーム:

(let ((x 10))
  x)

lambda... は、いくつかのパラメーターに適用される式の単なる構文糖衣です。前のletものはこれと同等です:

((lambda (x)
   x)
 10)

どちらの場合も、値10は という名前の変数にバインドされ、式xの本体は式letの本体と同じであることに注意してください。lambda

于 2012-04-04T20:41:38.360 に答える