这是字面上的缺点的特定于实现的行为吗?

2023-12-20

我正在测试中的代码这个有趣的答案 https://stackoverflow.com/a/6866155/768472.

CL-USER> (defun literal-cons ()
        (let ((cons '(1 . 2)))
          (incf (cdr cons))
          cons))
; in: DEFUN LITERAL-CONS
;     (INCF (CDR CONS))
; --> LET* 
; ==>
;   (SB-KERNEL:%RPLACD #:CONS1 #:NEW0)
; 
; caught WARNING:
;   Destructive function SB-KERNEL:%RPLACD called on constant data.
;   See also:
;     The ANSI Standard, Special Operator QUOTE
;     The ANSI Standard, Section 3.2.2.3
; 
; compilation unit finished
;   caught 1 WARNING condition
LITERAL-CONS
CL-USER> (literal-cons)
(1 . 3)
CL-USER> (literal-cons)
(1 . 3)
CL-USER> (literal-cons)
(1 . 3)

由于行为不一样,我想知道 SBCL 是否已使用上述警告将行为更改为它认为用户更可能期望的行为?预期的:

TEST> (defun literal-cons ()
        (let ((cons '(1 . 2)))
          (incf (cdr cons))
          cons))
LITERAL-CONS
TEST> (literal-cons)
(1 . 3)
TEST> (literal-cons)
(1 . 4)
TEST> (literal-cons)
(1 . 5)

简短的回答是,是的,这是特定于实现的行为。正如中所讨论的意外的数据持久性 https://stackoverflow.com/q/18790192/1281433,

相关文本来自 HyperSpecquote http://www.lispworks.com/documentation/HyperSpec/Body/s_quote.htm is:

如果文字对象(包括引用的 对象)被破坏性地修改。

这意味着any您从此类函数中看到的行为是特定于实现的(即使某些行为在实现中比其他行为更常见)。

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

这是字面上的缺点的特定于实现的行为吗? 的相关文章

  • F# 中的非类型化/类型化代码引用与宏卫生之间是否存在关系?

    我想知道 F 中的非类型 类型代码引用与宏系统的卫生之间是否存在关系 他们是否用各自的语言解决相同的问题 或者它们是不同的关注点 元编程方面是唯一的相似之处 即使在这方面 也存在很大的差异 您可以将宏的转换器视为从语法到语法的函数 就像您可
  • 如何在 Clojure 中遍历一棵树,同时收集每个节点节点的值?

    我想创建一个函数来收集二叉树中每个节点的值 在 ClojureDocs 中 我发现了几个用于遍历树 图的函数 例如 tree seq prewalk 和 postwalk https clojuredocs org clojure core
  • 为什么在基于 Lisp 的语言中习惯上将许多右括号放在一行上?

    通常代码如下所示 one thing another thing arg1 f arg5 r another thing arg1 f arg5 r 为什么不喜欢这样 one thing another thing arg1 f arg5
  • 人们可以放心地忽略宏和内置宏之间的区别吗?

    我从 Clojure 开始 这也是我的第一个 lisp 显然有很多东西需要吸收 为了减轻认知负担 我尝试找到我可以安全地忽略的部分 目前 人们能否安全地以相同的方式处理带有宏的表单和带有内置函数的表单 或者是否会出现以后出现的陷阱 换句话说
  • 对于案例,这些表达案例的方法中哪种最好?

    这些都有效 defun testcaseexpr thecase case thecase foo format t matched foo bar format t matched bar funk format t matched fu
  • 使用包阴影符号

    例如 我有这个包定义 它遮蔽了 COMMON LISP LISTEN defpackage shadows use common lisp shadow listen export listen 然后我想使用另一个包中的这个包 比如说 de
  • windows下无法用emacs + sbcl启动slime

    我想配置我的 emacs 以使用 SLIME 和 SBCL emacs 文件如下所示 add to list load path D app slime setq inferior lisp program sbcl require sli
  • 宏、Clojure 与 Common Lisp

    我和我的一些朋友正在开发一个新平台 我们想用 lisp 构建它 主要吸引力是宏 我们都使用 Common Lisp 但我想探索 Clojure 的选择 当我提出这一点时 其中一位说宏观体系 较弱 我想知道这是否属实 以及在哪些领域 就您可以
  • 解决斐波那契数列的 Lisp 方法

    我想尝试学习 Lisp 但很快就放弃了 我想我会再试一次 我正在看 求 400 万以下所有偶数斐波那契数的总和 我写了下面的代码 它可以工作 但是很丑陋 其中最主要的是它太慢了 因为它一直在进行简单的递归 当我用 Python 编写这个程序
  • gensym 在 Lisp 中做什么?

    我听到一些同学谈论他们如何使用该功能gensym为此 我问他们它做了什么 甚至在网上查了一下 但我真的无法理解这个函数的作用是什么两者都不为什么或何时最好使用它 特别是 我对它在 Lisp 中的作用更感兴趣 谢谢你们 独特且未被拘禁的符号
  • 评估 Common Lisp 宏的参数

    我想制作一个宏 其行为取决于它的参数之一 例如 defclass myvar l initarg l reader l defparameter mv1 make instance myvar l 10 defmacro mac1 v pr
  • 学习 Lisp 的资源 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 什么是 S 表达式

    所有 Lisp 开发人员似乎都知道什么是 S 表达式 但有人能为非 Lisp 开发者解释一下这一点吗 已经有一个维基百科条目 https en wikipedia org wiki S expression https en wikiped
  • 使用局部特殊变量

    为了方便原型设计 我依赖于许多全局变量 这些变量在整个代码中大量使用 但现在我想让其中一些成为本地的 但动态的 在本地声明它们是否有任何重大缺点 例如 效率等 special而不是全球 特殊变量不受欢迎的功能包括 缺乏参考透明度 这使得对代
  • SBCL初始化文件

    我想知道应该在哪里保存 sbclrc 文件 我尝试将其保存在我的 sbcl 文件夹中 但它似乎不起作用 我使用的是 Windows XP 和 Emacs 版本 23 我正在尝试设置 asdf install 这就是为什么我要修改初始化文件
  • SLIME 和 SWANK 入门:Lisp 连接意外关闭:连接被远程对等点断开

    我试图使用 slime connect 函数通过 sbcl 访问远程服务器 我遵循了 slime mov 电影中的所有步骤马可 巴林格 http www guba com watch 30000548671但在为 slime 创建 ssh
  • 递归分割列表函数 LISP

    split list 函数接受一个列表并返回一个由两个列表组成的列表 其中两个列表由输入的交替元素组成 我写了以下内容 defun split list L cond endp L list NIL NIL t let X split li
  • 我为什么要学习 Lisp? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何定义所有成员均为给定类型的列表

    我对 CL 类型系统有点陌生 但我认为像下面这样的东西可以工作 deftype list of type labels check all l every lambda item typep item type l and list sat
  • 使用 slime 时如何跳转到 emacs 中的函数定义?

    我已经使用安装了史莱姆https github com thephoeron slime pack https github com thephoeron slime pack并想进一步探索 common lisp 如何访问 emacs 中

随机推荐

  • EncryptedSharedPreferences 中需要使用什么密钥别名?

    如何在加密共享首选项中使用密钥别名 下面是我的加密共享首选项 KeyGenParameterSpec spec new KeyGenParameterSpec Builder DEFAULT MASTER KEY ALIAS KeyProp
  • R 提取列大于 40 的行[重复]

    这个问题在这里已经有答案了 再会 我有一个从 txt 文件中获取的数据集 gt MyData Xdat Ydat 1 1 12 2 2 23 3 3 34 4 4 45 5 5 56 6 6 67 7 7 78 我需要使用这个集合来提取与第
  • 预期有一个赋值或函数调用,但看到的是一个表达式。eslint no-unused-expressions

    您好 我在函数内使用三元运算符 但 eslint 会抛出错误 请帮我解决这个问题 const Test showBtn bubbleId latitude longitude zoom drillLevel gt setShowBtn sh
  • 无法解决android中属性不兼容错误

    我有一个以下错误 我不知道为什么会发生这种情况 我所做的就是添加标志 名为 mon 并尝试将其添加到 xml 中的自定义视图 mon 以外的标志有效 出色地 这个错误是什么意思 我很想听听你的消息 Android resource link
  • JSP表单日期输入字段

    我使用 Intellij 中的 Spring Web 应用程序创建了一个包含多个字符串的基本输入表单 仅使用字符串时 表单成功保存到后端 因此我决定在模型中添加一个日期字段 并尝试修改控制器 jsp 以在输入表单中接受此字段 并显示在记录列
  • 在 C++11 应用程序中记录错误的优雅方法?

    我正在开发一个小型 C 11 应用程序 一个 SDL2 游戏 并且我很难将一些面向对象的知识从 PHP Java 移植 到 C 例如 为了创建一个优雅的错误日志记录方法 我将创建一个包含各种适配器的类并在那里集中日志记录 我已经在 C 中做
  • Java Final 变量有默认值吗?

    我有一个这样的程序 class Test final int x printX Test System out println const called void printX System out println Here x is x
  • 使用 underscore.js 将两个(或多个)数组映射为一个

    我需要按元素添加几个数组 也就是说 我有几个长度相等的数组 并且我只需要一个具有相同数量的元素 即输入之和 的数组 Underscore 具有将所有元素折叠为一个并使用函数映射每个元素的方法 但我找不到任何方法将两个数组分段组合 如果我原来
  • 使用托管包框架实现语言服务

    我已按照演练中列出的步骤进行操作 http msdn microsoft com en us library bb166360 aspx http msdn microsoft com en us library bb166360 aspx
  • AWS CloudFormation 函数调用失败:Fn::ImportValue 不得依赖于任何资源、导入的值或 Fn::GetAZs

    我有一个云形成模板 mainVPC 它在 VPC 中创建几个子网并导出名称为 PrivateSubnetA PrivateSubnetB 的子网 我有一个不同的云形成模板来创建 DBSubnetGroup 如果用户不提供数据 我想使用 Pr
  • Pandas Dataframe 保存到 csv 文件

    我想知道如何将新的 pandas 系列保存到不同列的 csv 文件中 假设我有两个 csv 文件 它们都包含一列作为 A 我对它们做了一些数学函数 然后创建一个新变量作为 B 例如 data pd read csv filepath dat
  • 如何在java中进行批量http调用

    我正在尝试通过 Http 访问另一个服务以使用 HttpClient 获取数据 uri 应类似于端点 80 itemId 我想知道是否有办法进行批量调用来指定一组 itemId 我确实发现有人建议在创建请求时使用 setHeader Htt
  • register_shutdown_function 覆盖

    是否可以覆盖已经设置的register shutdown function堆 就像是 function f1 echo f1 function f2 echo f2 register shutdown function f1 echo ac
  • Python和MySQL打印结果

    我正在尝试自学 Python 但遇到了障碍 我需要从 MySQL 获取一个字段 但是当我从数据库检索数据时 结果很奇怪 这是我使用的下面的代码 cursor1 db cursor cursor1 execute select djname
  • Node.js 服务器只是不断加载,没有任何结果。

    我一直在尝试让我的服务器正常工作 但是当我发送发布数据时 它只是不断加载并且没有给出任何结果 这是我的 noen js 文件 var http require http var url require url Configure our H
  • 如何更改 Xcode 中 tableView 原型单元格的高度?

    我拖了一个UITableView到我的故事板中 我可以将信息完全插入其中 但为了定制单元 我添加了一个原型单元 当我手动更改它的高度时 模拟器中没有任何变化 对于那些只想在设计时更改行高的人 您可以选择 表视图单元格 然后在 大小 检查器中
  • 在 CSS 中绘制空的内联框?

    我确信这很简单 但我正在尝试画一组小的 空的 inlineHTML 中的框如下所示 span style border 1px solid black span 早些时候 我们制作了简单的 gif 图像 但随着浏览器显示的放大或缩小 图像看
  • 自定义无符号整数限制和翻转

    我目前需要 C 中的特殊数据类型 我需要数据类型是一个可以保存 0 151 之间值的整数 我已经知道我可以限制最小和最大频谱 但我希望它是一个翻转功能而不是限制钳位 有点像无符号整数在达到极限时如何回绕到 0 我不明白的一件事是如何处理溢出
  • 与 ContentEditable 一起使用的所见即所得编辑器是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 这是字面上的缺点的特定于实现的行为吗?

    我正在测试中的代码这个有趣的答案 https stackoverflow com a 6866155 768472 CL USER gt defun literal cons let cons 1 2 incf cdr cons cons