我需要帮助在let表单和未命名的过程表单之间进行转换

时间:2012-04-04 20:18:56

标签: forms scheme procedure let

我试图从一个let-form转换为一个unamed程序形式,我只是无法掌握它。

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)))
      )))

任何帮助将不胜感激,谢谢。

1 个答案:

答案 0 :(得分: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表达式的主体与{{1}的主体相同表达式