我正在阅读DrRacket文件http://docs.racket-lang.org/guide/binding.html
有一个功能
(define f
(lambda (append)
(define cons (append "ugly" "confusing"))
(let ([append 'this-was])
(list append cons))))
> (f list)
'(this-was ("ugly" "confusing"))
Run Code Online (Sandbox Code Playgroud)
我看到我们定义了函数f,我们在内部定义了带取(追加)的lambda,为什么?lambda的过程(主体)是另一个名为cons的函数,它附加两个字符串.
我根本不懂这个功能.谢谢 !
您所指的部分演示了Racket中的词法范围.与其他Scheme实现一样,重点是您可以"隐藏" 语言中的每个绑定.与大多数"主流"语言不同,没有真正的关键词是"神圣的",因为它们永远不会被本地绑定所遮蔽.
请注意,一个非常好的工具可视化绑定的位置是DrRacket的"检查语法"按钮:单击它,您将看到您的代码带有突出显示哪些部分是绑定,哪些是特殊形式 - 如果您将鼠标悬停在将鼠标悬停在特定名称上,您会看到一个箭头,告诉您它来自何处.