为什么 (list 'quote 'x) 计算结果为 'x 而不是 ('x) 或 (quote 'x)?

2023-11-23

我正在尝试学习 LISP,并正在查看一个代码示例,其中使用了类似于以下代码的内容:

(列出“引文 5”)

这在 REPL 中评估为“5”。我预计它的评估结果为 ('5) 或 (quote 5)

我正在 CLISP REPL 中尝试这个。

任何帮助,将不胜感激。


读取-求值-打印循环首先读取,然后求值

'quote 被读作“名称为 QUOTE 的符号”

5读作“数字5”

因此 (list 'quote 5) 被评估为“创建一个列表,其第一个元素是名称为 QUOTE 的符号,第二个元素是 5”。

该评估的结果可以写为“(引文5)”。 “'5”是另一种表达方式,某些(可能是大多数)lisp 实现中的打印机将选择打印较短的形式而不是较长的形式。

当你通过在 repl 中输入来学习这些东西时,你需要记住这一点 读取和评估的两个步骤是不同的,但是循环同时执行这两个步骤

Try

* (read-from-string "(list 'quote 5)")
(LIST 'QUOTE 5)

一次执行一步,或者

* (first (read-from-string "(quote 5)"))
QUOTE
* (second (read-from-string "(quote 5)"))
5
* (read-from-string "(quote 5)")
'5

说服自己“(quote 5)”和“'5”是同一件事

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 (list 'quote 'x) 计算结果为 'x 而不是 ('x) 或 (quote 'x)? 的相关文章

  • Scheme/Racket有枚举操作吗?

    Scheme Racket 是否有相当于 Haskell 中的 a b 表示法的枚举表示法 在 Haskell 中 1 5 计算结果为列表 1 2 3 4 5 for list i in range 1 6 i sequence gt li
  • 了解 LISP 中的绑定变量和自由变量

    我正在阅读SICP 又出现了绑定变量和自由变量的话题 然而 我对此感到困惑 术语 绑定变量 仅适用于形式参数变量吗 此外 文本还指出过程定义 绑定 其形式参数 这让我感到困惑 因为有些人说我们将值 绑定 到变量 显然 当我们谈论不同类型的变
  • Clozure Common Lisp - TCP 套接字编程 - 发送回复

    我有一个非常小的程序 它打开一个套接字并接受一个连接 然后它会获取远程 IP 和端口 我想向远程计算机 telnet 发送一条短信并关闭连接 我无法确定哪个函数用于向 telnet 客户端发送消息 The Clozure手册 http cc
  • 以下函数式编程模式的正确术语是什么?

    我听说它被称为stream http mitpress mit edu sicp full text sicp book node72 html as an 无限列表 http en wikibooks org wiki Clojure P
  • 查找 lambda 表达式中的自由变量

    有谁知道如何找出 lambda 表达式中的自由变量 自由变量是不属于 lambda 参数的变量 我当前的方法 这对我毫无帮助 是简单地使用 car 和 cdr 来遍历表达式 我的主要问题是确定一个值是否是一个变量或者它是否是方案原语之一 有
  • CLISP - 反转简单列表

    我必须反转简单 单维 列表的元素 我知道有一个内置的反向函数 但我不能用它来做这个 这是我的尝试 defun LISTREVERSE LISTR cond lt length LISTR 2 LISTR listr is 1 atom or
  • Common Lisp 中的(随机)不那么随机?

    好的 最后一个问题 我将用 Common Lisp 完成我的猜数游戏 D 每当游戏开始 或者在第一个游戏之后开始新游戏 时 都会调用以下函数 Play the game defun play If it s their first time
  • 展开方案中的函数

    Goal 实施unfold仅使用两个参数的函数 论据 第一个参数是 f 它接受某种类型 I 的初始值并返回 nil 或两个元素的 cons 对 这两个元素中的第一个是某种类型 A 的列表中的下一个元素 下一个初始值又是某些类型 I 第二个参
  • 在 Lisp 解释过程中,“读者”的任务是什么?

    我想知道 读者 在解释 编译 Lisp 程序期间的目的 或者更准确地说 是 读者 的任务 从我刚刚完成的问题前研究来看 在我看来 读者 特别是本例中的 Clojure 可以被视为 语法预处理器 它的主要职责是读取器宏和原始形式的扩展 所以
  • 如何定义和使用 Common Lisp 包(库)?

    我在几个 Lisp 源文件中开发了一些 Common Lisp 函数 我希望这些函数可以轻松地供我编写的其他函数使用 或者如果我认为它们对其他人有用的话 可以在 github 上提供 现在 我只是将它们放在一些预定义的文件夹中并使用 req
  • 我应该在 Common Lisp 中使用哪些正则表达式库? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 Clojure 中遍历一棵树,同时收集每个节点节点的值?

    我想创建一个函数来收集二叉树中每个节点的值 在 ClojureDocs 中 我发现了几个用于遍历树 图的函数 例如 tree seq prewalk 和 postwalk https clojuredocs org clojure core
  • 将列表传播到父代 sexp 中

    在任何 lisp 中是否有一种形式可以在父 sexp 中 传播 列表 喜欢 spread 1 2 3 gt 1 2 3 有两种方法可以做到这一点 哪个更好取决于您最终想要什么 一般来说 您可以使用 inside 反引号 表格如下 被评估以生
  • 人们可以放心地忽略宏和内置宏之间的区别吗?

    我从 Clojure 开始 这也是我的第一个 lisp 显然有很多东西需要吸收 为了减轻认知负担 我尝试找到我可以安全地忽略的部分 目前 人们能否安全地以相同的方式处理带有宏的表单和带有内置函数的表单 或者是否会出现以后出现的陷阱 换句话说
  • 将字符串转为运算符

    我怎样才能转动一个字符串 例如 进入运营商加号 使用查找表 import operator ops operator add operator sub etc print ops 1 1 prints 2
  • 使用包阴影符号

    例如 我有这个包定义 它遮蔽了 COMMON LISP LISTEN defpackage shadows use common lisp shadow listen export listen 然后我想使用另一个包中的这个包 比如说 de
  • Lisp / Clojure:编写函数生成宏是个好主意吗?

    这个问题 https stackoverflow com q 7852351 346587要求创建一个 Clojure 宏来生成多个函数 我们找到了一种方法来做到这一点 但仍被 这是一个好主意吗 的问题所困扰 我的第一反应是并不真地 有两个
  • windows下无法用emacs + sbcl启动slime

    我想配置我的 emacs 以使用 SLIME 和 SBCL emacs 文件如下所示 add to list load path D app slime setq inferior lisp program sbcl require sli
  • 在 Common Lisp 中编写 Lambda 表达式

    我目前正在阅读 Paul Graham 的 ANSI Common Lisp 并且有一个关于编写 lambda 表达式的问题 我们是否需要在 lambda 表达式前面加上前缀 如果我在 REPL 中写这样的东西 它会工作得很好 gt lam
  • 为什么 LISP 中符号名称中的连字符是约定俗成的?

    这个推荐的理由是什么 为什么不与使用下划线的其他编程语言保持一致 我认为 LISP 使用连字符有两个原因 历史 和 因为你可以 History LISP 是一种古老的语言 在早期输入下划线可能会很困难 例如 我用于 LISP 的第一个终端是

随机推荐

  • 三角测量和直接线性变换

    按照 Hartley Zisserman 的多视图几何算法 12 最佳三角测量方法 p318 我得到了相应的图像点 xhat1 和 xhat2 步骤 10 在步骤11中 需要计算3D点Xhat 其中一种方法是直接线性变换 DLT 在 12
  • 如何从Java中的日期获取世纪

    如何从Java中的日期获取当前世纪 例如日期 06 03 2011 根据格式 MM dd yyyy 我怎样才能从这个日期使用当前世纪SimpleDateFormat 哈利 莱姆发布的内容略有变化 他的逻辑并不完全正确 1901 年是 20
  • 为什么要包括警卫?

    包括定义的警卫here 用于防止在编译时两次加载相同的代码 为什么我的编译器 GCC 无法检测到它正在加载相同的代码两次并具有合理的默认行为 仅仅是因为您可能希望编译器加载该文件两次 请记住 那个 include只需加载一个文件并将其内容放
  • 我可以优化 Mercurial 克隆吗?

    我的 Mercurial 克隆变得非常慢 可能是由于磁盘碎片所致 有没有办法优化它 最明显的方法是创建一个新克隆 然后将我的 MQ 保存的捆绑包 hgrc 等复制到新克隆并删除旧克隆 但似乎有人以前遇到过这个问题并进行了扩展来做到这一点 如
  • 如何使用 std::rel_ops 自动提供比较运算符? [复制]

    这个问题在这里已经有答案了 如何获得运营商 gt gt lt and from and
  • 如何在 Python 中检测文件是否为二进制(非文本)?

    在 Python 中如何判断文件是否是二进制 非文本 我正在 Python 中搜索大量文件 并不断在二进制文件中获取匹配项 这使得输出看起来非常混乱 我知道我可以使用grep I 但我对数据的处理超出了 grep 允许的范围 过去 我只会搜
  • “此链接已停用,因为它未嵌入 JSF 表单中。”

    当我使用以下命令链接时
  • 比较悬空指针合法吗?

    比较悬空指针合法吗 int p q int a p a int b q b std cout lt lt p q lt lt n 注意两者如何p and q指向已经消失的物体 这合法吗 介绍 第一个问题是使用价值是否合法p at all A
  • 如何在 Java 中合并两个 XML

    我正在尝试用 Java 合并两个 xml 我正在使用 STaX API 来编写这些 XML 我在互联网上搜索了很多关于如何合并 xml 的信息 但没有一个看起来像C 有没有使用 StAX 在 Java 中执行此操作的直接方法 xslt 可能
  • 您如何组织版本控制存储库?

    首先 我知道这一点 您将如何为内部软件项目组织 Subversion 存储库 接下来 实际问题 我的团队正在重组我们的存储库 我正在寻找有关如何组织它的提示 在本例中为 SVN 这就是我们的想法 我们有一个存储库 多个项目和多个 svn e
  • 如何表示数据库中的继承? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我正在考虑如何在 SQL Server 数据库中表示复杂的结构 考虑一个需要存储一系列对象的详细信息的应用程序 这些对象共享一些属性 但有许多其他不常见的属性 例如 商业保险套餐可能在同一
  • SQL Server 字段被截断

    好的 我正在使用 SQL Server 2008 并且有一个类型的表字段VARCHAR MAX 问题是 当使用保存信息时Hibernate 内容VARCHAR MAX 字段被截断 我在应用程序服务器或数据库服务器上没有看到任何错误消息 该字
  • 访问 R 中列表列表的同名列表元素

    我经常遇到需要为不同变量创建许多相似模型的情况 通常我将它们转储到列表中 这是虚拟代码的示例 modlist lt lapply 1 10 function l data lt data frame Y rnorm 10 X rnorm 1
  • DataAnnotations 的 FileExtensions 属性在 MVC 中不起作用

    我正在尝试使用 MVC 中的 HTML FileUpload 控件上传文件 我想验证文件只接受特定的扩展名 我尝试过使用 DataAnnotations 命名空间的 FileExtensions 属性 但它不起作用 请参阅下面的代码 pub
  • openCSV 没有读取我的整个文件

    我有一个 Java 应用程序 我正在使用 openCSV 来读取文件 非常大 然后 我将第四列 如果有影响的话 最终会添加一列或两列 放入 HashSet 中 并将其输出到一个新文件中 这一切似乎工作正常 但我发现它只读取文件的一部分 27
  • 如何使用唯一复合键

    我有一张桌子 Item ItemName ItemSize Price Notes 我正在制作 ItemName ItemSize 的复合键来唯一标识项目 现在 在阅读了 stackoverflow 上建议使用 UNIQUE 的一些答案后
  • 我什么时候会选择 AesCryptoServiceProvider 而不是 AesManaged 或 RijndaelManaged?

    我认为区别因素是 AesCryptoServiceProvider 符合 FIPS 标准 AesManaged 是跨平台的 需要 NET 3 0 RijndaelManaged 在 NET 2 0 上运行 需要限制块大小 是这样吗 Aes托
  • 字段值必须唯一,除非为 NULL

    我正在使用 SQL Server 2005 我有一个必须包含唯一值或 NULL 值的字段 我认为我应该用以下任一方式强制执行此操作CHECK CONSTRAINT or a TRIGGER for INSERT UPDATE 与触发器相比
  • 无法验证 iOS 应用程序(已拥有有效证书)

    当切换到 Yosemite 时 我对 Mac 进行了全新安装 但现在将 iOS 提交到商店时遇到问题 当我验证我的存档时 我不断收到 您的帐户已经拥有有效的 iOS 分发证书 我已尝试从会员中心重命名并重新下载我的证书 但这不起作用 一个非
  • 为什么 (list 'quote 'x) 计算结果为 'x 而不是 ('x) 或 (quote 'x)?

    我正在尝试学习 LISP 并正在查看一个代码示例 其中使用了类似于以下代码的内容 列出 引文 5 这在 REPL 中评估为 5 我预计它的评估结果为 5 或 quote 5 我正在 CLISP REPL 中尝试这个 任何帮助 将不胜感激 读