两个 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*
,而不是全局变量的值。
我正在阅读一篇使用 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*
,而不是全局变量的值。