( (lambda x x) 2 3 4 5)
scheme
lambda 的syntax 是: (lambda (formals) (body) )
( (lambda x x) 2 3 4 5) 什么意思啊?
这里 第一个x 是 形参? 第二个x 是 body ? 2 3 4 5 其实是一个 传递给它的 实参列表 ' (2 3 4 5) ??
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你理解得很正确,第一个就是形参,第二个是body。
如果你不敢确认后面的2 3 4 5不是list,那分开调用可以看得清楚些:
(define fun
(lambda x
x)) ;什么都不做,直接返回传入值
执行(fun 2 3 4 5),结果
'(2 3 4 5)
(lambda x x)这样的写法容易引起混乱,比较规矩的写法还是把参数列表括起来,这样:
(lambda (x) x)就不会引起混淆了。
(lambda x x) 表示:
这是个匿名函数, 参数列表为x, 函数体只有一个表达式, 就是返回参数列表x.
(lambda (x) x)表示:
这个函数的参数列表是(x), 这里x表示它的第一个参数.
无论如何, lambda表达式的第二个元素是它的参数列表.
再看
(lambda (x . y) y) 表示:
这个函数的参数列表是(x . y), x是第一个参数, y表示余下参数组成的列表.
可以参考 “The Scheme Programming Language" 的 2.5 [点这里]
相关的是这一段:
[ 本帖最后由 win_hate 于 2009-1-25 22:42 编辑 ]