首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Let:在Common Lisp中创建临时变量

Let:在Common Lisp中创建临时变量
EN

Stack Overflow用户
提问于 2010-09-09 06:07:21
回答 2查看 906关注 0票数 1

给定一个函数:

代码语言:javascript
复制
(defun foo (bar)
 (let ((baz bar))
    (setf baz (+ baz 1)))

我被赋予了理解(也许是错误的?)baz变成了对bar的某种引用,而不是bar的真实副本。

我想要做的是创建一个真正的临时变量,这样我就可以确保我可以随意处理传入的变量,而不会有任何副作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-09 06:16:58

我想我更倾向于说"baz变成了对bar引用的同一事物的引用“。但是你说得对,let不做任何复制。

如果你想复制一份bar,你当然可以,尽管你怎么做取决于bar是什么:一个列表,一个向量,等等。

对于好奇的人,Kent Pitman写了一个great article,主题是“为什么没有通用复制功能?”

票数 5
EN

Stack Overflow用户

发布于 2010-09-09 17:29:09

通常,只要不使用任何变异函数(槽访问器、析取列表操作,诸如此类的东西),您就可以随意引用一个“东西”,而不会出现任何问题。

在你复制的情况下,你使用的是数字,这些数字“总是”安全的(如果你对一个新的拷贝做算术,一个新的拷贝将被生成)。

不幸的是,没有通用的“制作副本”功能,部分原因是“制作副本”在所有情况下的含义并不明显,部分原因是复制循环数据结构不一定是微不足道的(通用复制函数必须能够做到这一点)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3672256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档