Scheme中的标识符和绑定 - 如何解释函数?

new*_*int 1 scheme racket

我正在阅读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的函数,它附加两个字符串.

我根本不懂这个功能.谢谢 !

Eli*_*lay 5

您所指的部分演示了Racket中的词法范围.与其他Scheme实现一样,重点是您可以"隐藏" 语言中的每个绑定.与大多数"主流"语言不同,没有真正的关键词是"神圣的",因为它们永远不会被本地绑定所遮蔽.

请注意,一个非常好的工具可视化绑定的位置是DrRacket的"检查语法"按钮:单击它,您将看到您的代码带有突出显示哪些部分是绑定,哪些是特殊形式 - 如果您将鼠标悬停在将鼠标悬停在特定名称上,您会看到一个箭头,告诉您它来自何处.