Common Lisp 中的属性列表是否引用某些全局状态?

2024-03-20

下面的代码有z作为局部变量,但它的行为就像全局变量一样:

(defun foo (m)
  (let ((z '(stuff nil)))
    (push m (getf z 'stuff))
    (print z)))

(foo 1)
(foo 2)
(foo 3)

我希望输出是

(STUFF (1)) 
(STUFF (2)) 
(STUFF (3)) 
T

但是当用 SBCL 运行它时我看到

(STUFF (1)) 
(STUFF (2 1)) 
(STUFF (3 2 1)) 
T

为什么会这样呢?这种行为是属性列表特有的吗?


In foo, z绑定到文字表达式'(stuff nil)。该功能会破坏性地改变z,从而破坏性地改变了文字的值。 LISP 在这种情况下的行为取决于实现。某些实现会乖乖地改变文字值(如您的情况)。其他实现将文字放置在只读内存位置,如果您尝试修改这些文字,则会失败。

要获得所需的行为,请使用COPY-LIST制作可以安全修改的文字副本:

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

Common Lisp 中的属性列表是否引用某些全局状态? 的相关文章

  • Common Lisp 鼠标位置与 ltk

    我正在 Common Lisp 中制作一个简单的小程序 我想使用鼠标移动来控制它 我用 LTK 作为窗口 我找不到任何可以检索鼠标位置的函数 例如 Emacs Lisp 有 鼠标像素位置 我发现这在罗塞塔代码上 https rosettac
  • Lisp / Clojure:编写函数生成宏是个好主意吗?

    这个问题 https stackoverflow com q 7852351 346587要求创建一个 Clojure 宏来生成多个函数 我们找到了一种方法来做到这一点 但仍被 这是一个好主意吗 的问题所困扰 我的第一反应是并不真地 有两个
  • 在Emacs中,这个错误是什么意思? “警告:运行时需要 cl 包”

    我正在字节编译一个模块 它给了我这个警告 Warning cl package required at runtime 为什么这是一个警告 我很清楚我正在使用cl包裹 事实上有一个 require cl 模块中的语句 使用有什么问题吗cl
  • 在我的 Linux 机器上安装 lisp

    我使用 Vim 作为我的编辑器 Practical common Lisp 建议安装 Lispbox 我不知道如何使用 emacs 不知道如何用那个 T T 运行 lisp 代码 之后我找到了一个名为 limp vim 的 vim lisp
  • (cons 'a (cons 'b 'c)) 和 (cons 'a '(b.c)) 之间的 Lisp 区别

    有什么区别 cons a cons b c A B C and cons a b c A B C 我需要使用 cons 创建以下列表 a b c 所以我试图理解 是什么 代表 L E 我有以下内容 cons cons a b c 但它产生
  • 为什么在 emacs-lisp 中的函数参数之前使用#'?

    我熟悉 Emacs Lisp 但不熟悉 Common 或任何其他 Lisp 一些 Lisp 程序员建议 例如emacs 的基本功能 https stackoverflow com questions 17076646 a basic fun
  • 从when语句内的函数返回

    我想做的就是使用 when 语句返回一个值 我想要以下功能 if x return y 我正在尝试使用 when x y 但是when语句并没有以退出函数并返回y的方式进行计算 它只是愉快地继续下一行 有没有办法做到这一点而不需要制作一个看
  • 为什么 SBCL eval 函数会丢失它运行的宏?

    print x 打印出我想要评估的内容 但是 eval x 失败了 但如果我运行 x 它就可以了 我缺少什么 请告诉我为什么这不起作用 或者我是否在做一些愚蠢的事情 我正在尝试打印动态大小的表并设置 lambda 变量以最终计算表中每个单元
  • Scheme (Lisp) 中树的深度反转

    我对Scheme中的基本树数据结构进行了深度逆向 define deep reverse t cond null t not pair t t else cons deep reverse cdr t deep reverse car t
  • Python 宏:用例?

    如果 Python 有一个类似于 Lisp Scheme 的宏工具 比如元Python https code google com p metapython 你会如何使用它 如果您是一名 Lisp Scheme 程序员 您会使用宏来做什么
  • 将数字转换为英文字母列表

    我有下面的函数 它将数字输入转换为这些数字的部分翻译的单词输出 使用乘积和商 它将数字的单词表示相加 同时将数字分组 例如 number name 87969087 gt 87 million 969 thousand 87 number
  • Lisp 中的十进制到二进制 - 制作非嵌套列表

    当达到我的递归情况时 我使用list将未来结果附加到当前结果 但由于递归 我最终得到一个嵌套列表 当我有一个导致递归超过五次的数字时 这会导致错误 任何想法如何我可以在一个简单的非嵌套列表中获得结果 例如 CL 用户 100 8 gt BI
  • Clojure 中的快速素数生成

    我一直在努力解决欧拉计划 https projecteuler netClojure 中的问题得到了改善 我已经遇到过几次素数生成问题 我的问题是它花费的时间太长了 我希望有人能帮助我找到一种有效的方法 以 Clojure 的方式做到这一点
  • Common Lisp 反引号/反引号:如何使用?

    我在使用 Lisp 的反引号读取宏时遇到问题 每当我尝试编写一个似乎需要使用嵌入式反引号的宏时 例如 w x y 来自保罗 格雷厄姆的ANSI 通用 Lisp 第 399 页 我不知道如何以编译的方式编写代码 通常 我的代码会收到一整串错误
  • Scheme 和 Common Lisp 之间的实际区别是什么? (或任何其他两种 Lisp 方言)

    注意 我并不是在问学哪个 哪个更好或者诸如此类的问题 我选择了 SICP 的免费版本 因为我觉得它读起来很好 我听说过有关它的好东西 并且我对编程的这一方面很感兴趣 我知道Scheme 是Lisp 的一种方言 我想知道 Scheme 和Co
  • Racket 与Scheme 有何不同?

    Racket 是Scheme 的后代 Racket 与 R6RS 有何不同 它添加了什么 删除了什么 或者只是有所不同 我知道 Racket 不仅仅是一种语言 它还是一个语言平台 但我指的是主要的 Racket 方言 Racket 最终基于
  • 我如何访问 Common lisp 中 Defclass 插槽的 :Documentation 字符串

    好的 这是我如何实例化 Defclass 以及相关的 Defmethod 和 Defparameter defvar account numbers 0 defclass bank account customer name initarg
  • 如何指定 sbcl(或 common lisp)向量中的元素类型?

    我尝试在 sbcl 1 1 14 中执行以下代码 但类型检查似乎忽略了向量元素的声明 defun test vec declare type vector integer vec format nil a elt vec 0 有什么提示吗
  • LISP 非常简单的列表问题

    我正在学习 lisp 而且我对此还很陌生 所以我想知道 如果我这样做 defparameter list 1 list 1 2 defparameter list 2 list 2 3 defparameter list 3 append
  • 计算二项式时“应用程序:不是过程”

    我正在定义一个函数binomial n k 又名帕斯卡三角形 但出现错误 application not a procedure expected a procedure that can be applied to arguments g

随机推荐

  • 网络挖掘-分类算法

    我的高级项目是确定网页的主导类别 我抓取了 dmoz 现在我正在尝试构建arff 之后我将使用一些特征提取方法和分类算法 您知道哪种特征提取方法与用于网络挖掘的任何分类算法表现良好吗 u分类 http www uclassify com u
  • Java 同步引用

    我有A级和B级 public class A private static List
  • 有没有一种将视频从 Android 流式传输到 RTSP 服务器的好方法?

    我已经四处寻找并没有真正发现任何东西 我想通过流将视频从内置摄像头发送到我的 RTSP 服务器 在寻找示例时 我发现 MediaPlayer 的 setDataSource 方法可能只包含服务器上流的位置 我尝试用以下方法来模拟 media
  • 更新关系数据的算法

    已知哪些算法可以在存在数据库约束的情况下通过插入 更新和删除行来执行更新数据库的任务 更具体地说 要删除的行的前图像 要插入的行的后图像以及要更新的行的两个图像都在内存中 这些行可能用于多个表 更新的确切顺序要么是未知的 要么是没有被保留
  • mingw 中的 libpthread 找不到库

    我正在尝试使用 mingw 编译以下程序 include
  • 找到gzip的开头和结尾?

    我有一些文件 有一些随机字节和多个 gzip 文件 如何在某个文件中找到 gzip 流的开头和结尾 gzip 流之间有许多随机字节 所以 基本上我需要找到任何 gzip 文件并从那里获取它 读自RFC 1952 GZIP https www
  • 将 xml 转换为 JSON 的库,反之亦然

    我需要将 xml 中的一种文档格式转换为 JSON 反之亦然 我相信这是一个常见的要求 也许仍然有一个库可以做到这一点 有知道的吗 不是 C 但是纯粹的 XSLT 2 0 实现将 JSON 对象转换为 XML 文档 看看来自FXSL 2 x
  • Docker 构建“无法解析 'archive.ubuntu.com'” apt-get 无法安装任何内容

    我一直在尝试在以前可以工作但现在不再工作的各种文件上运行 Docker 构建 一旦 Docker 文件包含任何用于安装软件的行 它就会失败并显示一条消息 指出找不到该包 RUN apt get y install supervisor no
  • 在 C# 中,如果抛出未处理的异常,Finally 块是否会在 try、catch、finally 中执行? [复制]

    这个问题在这里已经有答案了 另一个面试问题期待真 假答案 但我不太确定 复制 在 NET 中 如果 catch 块中出现错误 finally 总是会被调用怎么办 https stackoverflow com questions 58209
  • python-pandas 和 mysql 等数据库

    Pandas 的文档提供了大量处理以各种格式存储的数据的最佳实践示例 然而 我找不到任何使用 MySQL 等数据库的好例子 任何人都可以向我指出链接或提供一些如何使用转换查询结果的代码片段mysql python有效地处理 Pandas 中
  • 在 ReactJS 中解析 JSON 数据

    我有这样的数据 movies abridged cast characters Dominic Toretto id 162652472 name Vin Diesel characters Brian O Conner id 162654
  • 按周分组并选择本周的记录

    我一直在尝试使用 MySQL 显示每周销售结果表 其中一周的结果应如下所示 Sun Mon Tues Wed Thur Fri Sat 所以我继续使用这个查询 SELECT DATE FORMAT cart calendar datefie
  • 如何使用 Java 连接到 Active Directory

    我使用的是Weblogic Ejb3 0 爪哇1 6 我需要通过 Java 代码访问 Active Directory 我读到了几种方法 Kerberos LDAP 有人可以建议我以舒适的方式这样做吗 我在哪里可以有一些完整的代码示例 谢谢
  • 检查 jolt 中是否为 null 或为空,并输入输入 JSON 中存在的另一个值

    这是我的输入 JSON AddressBilling FirstName Some Name LastName Some Name Address some address AddressShipping FirstName LastNam
  • 纯函数式语言中的高效堆

    作为 Haskell 的练习 我正在尝试实现堆排序 在命令式语言中 堆通常被实现为数组 但这在纯函数式语言中效率非常低 因此 我研究了二进制堆 但到目前为止我发现的所有内容都是从命令式的角度描述它们的 并且所提出的算法很难转化为函数设置 如
  • 访问扩展的background.js的控制台和开发工具

    我刚刚开始使用 Google Chrome 扩展 但似乎无法从后台 js 登录到控制台 当发生错误时 例如 由于语法错误 我也找不到任何错误消息 我的清单文件 name My First Extension version 1 0 mani
  • GWT 中的本机 Javascript 方法

    我的 GWT Java 类之一中有一个本机 Javascript 方法 但我在从本机 Javascript 代码调用我的 Java 方法时遇到问题 我试着跟随this http code google com webtoolkit doc
  • 设置多个 geom_sf 图例的格式

    我正在 ggplot 中处理多个 sf 几何图形 并希望以点 线和正方形 对于多边形 的形式显示图例 然而 geom sf 图例结合了我的几何特征 即结合线和点 如下所示 library ggplot2 library sf poly1 l
  • 如何在 PySpark 中过滤 MapType 中的键?

    给定一个如下的 DataFrame 是否可以过滤掉 Column 的一些键收藏PySpark 中的 MapType StringType StringType True 同时保持架构完整 root id string nullable tr
  • Common Lisp 中的属性列表是否引用某些全局状态?

    下面的代码有z作为局部变量 但它的行为就像全局变量一样 defun foo m let z stuff nil push m getf z stuff print z foo 1 foo 2 foo 3 我希望输出是 STUFF 1 STU