Common Lisp:在反引号中取消引用符号

开心果

以下代码段给了我预期的结果:

(let ((name 'test)
      (args '("arg1" "arg2")))
     `(defun ,name ,@args))

;; (DEFUN TEST "arg1" "arg2")

为什么如果出现args符号列表QUOTE

(let ((name 'test)
      (args '('arg1 'arg2)))
     `(defun ,name ,@args))

;; (DEFUN TEST (QUOTE ARG1) 'ARG2)
菲利普·马蒂亚斯·舍费尔

读者将扩展'symbol(quote symbol)所以你的情况

'('arg1 'arg2)

相当于

(quote ((quote arg1) (quote arg2)))

评估结果为以下列表:

((quote arg1) (quote arg2))

从反引号开始对表单进行评估会导致将列表元素((quote arg1)(quote arg2)拼接到结果列表(defun ...)中与之前字符串相同的位置

我不知道为什么您的实现会打印扩展后的第一个拼接元素,而不显示第二个。但是,如上所述,两种形式在阅读时都是等效的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Common Lisp中的反引号:读取和评估

来自分类Dev

在Common Lisp中在不带括号和引号的函数中使用符号参数

来自分类Dev

Common Lisp:避免对函数中的符号求值

来自分类Dev

(组成)在Common Lisp中

来自分类Dev

Common Lisp中的'()vs()

来自分类Dev

#ifndef在Common Lisp中

来自分类Dev

我可以在Common Lisp中取消调用功能吗

来自分类Dev

我可以在Common Lisp中取消调用功能吗

来自分类Dev

我可以在Common Lisp中取消调用功能吗

来自分类Dev

如何在Common Lisp中按字母顺序比较符号?

来自分类Dev

如何擦除 Common Lisp 中符号的所有属性?

来自分类Dev

Common Lisp中的功能范围

来自分类Dev

更改-在Common Lisp中变为+

来自分类Dev

Common Lisp中的矩阵乘法

来自分类Dev

Common Lisp中的动态绑定

来自分类Dev

更改-在Common Lisp中变为+

来自分类Dev

Common Lisp中的功能范围

来自分类Dev

Common Lisp 中的变量范围

来自分类Dev

Emacs / Common Lisp:引用变量的值

来自分类Dev

在 common lisp 中获取“common-lisp:setf common-lisp:list* 未定义”

来自分类Dev

如何在 Common Lisp 中删除字符串中的转义双引号?

来自分类Dev

Jupyter和Common Lisp

来自分类Dev

〜|的含义 以Common Lisp格式

来自分类Dev

从Common Lisp中的列表中删除项目

来自分类Dev

从Common Lisp中的列表中删除项目

来自分类Dev

如何在Common Lisp中映射功能?

来自分类Dev

在Common Lisp中调用函数列表

来自分类Dev

关于Common Lisp中的MERGE函数

来自分类Dev

为什么FEXPR被丢弃在Common Lisp中?