我试图从一个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)))
)))
任何帮助将不胜感激,谢谢。
答案 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}的主体相同表达式