我正在阅读Daniel Friedman撰写的The Little Schemer一书.我不明白为什么书中的每个函数都是用lambda表达式编写的.
(define fun1 (lambda (x1 x2) (+ x1 x2))) (define (fun2 x1 x2) (+ x2 x2))
这两个功能做同样的事情,但第二个功能更整洁.我很好奇在各地使用lambda的原因.
在这种情况下我使用了DrRacket.
(define (x . a) ...)
只是一个缩写
(define x (lambda a ...))
在1975年的第一个方案报告中,你没有这个缩写.在1978年的修订报告中,它被引入.
这个小小的Schemer只是1974 年的The Little Lisper的后期版本.它早于Scheme,当它被修复为遵循Scheme时,他们试图保持尽可能接近原始版本.此外,当你使用(define x (lambda (arg1) ...))
它时,很明显程序绑定与其他变量绑定没有区别,它指向的对象是闭包代码而不是数据.
如果你看看SICP视频讲座,你会发现Abelson和Sussman确实有学生对此感到困惑,所以最好只使用其中一个,因为匿名程序是你需要触摸的东西,这显然是你想教的带有显式lambda而不是语法糖的形式.