【问题标题】:I need help converting between the let form and unnamed procedure form我需要帮助在 let 表单和未命名的过程表单之间进行转换
【发布时间】:2012-04-18 14:31:42
【问题描述】:

我试图从一个 let-form 转换为一个未命名的过程表单,但我无法掌握它的窍门。

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

任何帮助将不胜感激。

【问题讨论】:

    标签: forms scheme procedure let


    【解决方案1】:

    你几乎明白了!表达式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 表达式的主体相同

    【讨论】:

    • 谢谢,但我在发帖几分钟后就知道了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2010-09-29
    相关资源
    最近更新 更多