1

我试图从 let-form 转换为未命名的过程形式,但我无法掌握它。

让程序是这样的。

(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

你几乎明白了!表达式周围只有几个括号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 回答