两个 Scheme 代码示例及其在 Common Lisp 中的等效表达式

Two Scheme code samples and their equivalent expression in Common Lisp

我正在阅读一篇使用 Scheme 描述实现的文章。我知道一点 Common Lisp 但不知道 Scheme。

我希望您能够解释两个 Scheme 代码示例并向我展示它们与 Common Lisp 的对应关系。

首先,这个Scheme是什么意思:

(define (content cell)
    (cell ’content))

我认为这意味着:定义一个名为 content 的函数,它有一个名为 cell 的参数。在 Common Lisp 中它写成:

(defun content (cell)
   (...))

到目前为止我说得对吗?

我不确定函数体在做什么。参数 (cell) 实际上是一个函数,函数体正在调用函数,传递给它一个符号,恰好是当前函数的名称?这是对应的Common Lisp:

(defun content (cell)
   (funcall cell ’content))

这是第二个 Scheme 代码示例:

(define nothing #(*the-nothing*))

我相信它正在创建一个全局变量并将其初始化为 #(*the-number*))。所以对应的Common Lisp是:

(defvar nothing #(*the-nothing*))

是吗?英镑符号 (#) 是否有特殊含义?我猜 *the-nothing* 指的是一个全局变量,是吗?

从广义上讲:对两者都是肯定的,但有一个主要警告。更具体地说,第一个是接受一个名为 cell 的参数,并使用符号 'content. (顺便说一句,你的 unicode 引号让我有点害怕。这只是复制粘贴问题吗?)

在第二种情况下,散列是定义向量的快捷方式。所以,例如:

(vector? #(abc)) ;; evaluates to #t

但是,散列也有引用行为。正如

的第一个元素
'(a b c)

是符号'a(而不是名为a的变量的值),向量中的第一个值

#(*the-nothing*)

符号'*the-nothing*,而不是全局变量的值。