首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lisp样式: setq与setf

Lisp样式: setq与setf
EN

Stack Overflow用户
提问于 2009-06-09 18:29:34
回答 6查看 12.8K关注 0票数 24

Peter Norvig在page 50上的Paradigms of Artificial Intelligence Programming中提到,当选择使用setq或setf将变量更新为值时,在特异性和一致性之间进行权衡。你有什么建议吗?你有没有遇到过比可读性重要得多的情况?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-06-09 18:56:11

使用setq比较低级,但setf的性能不是问题。setf允许您(或库编写者)提供定制的setf行为,比如设置定制数据结构的某些部分。我要说的是:除非你有理由不这样做,否则请随时随地使用setf。

另请参阅实用Common Lisp,第3章:“SETF宏是Common Lisp的主要赋值运算符。”PCL可在线免费获得:http://gigamonkeys.com/book/

票数 19
EN

Stack Overflow用户

发布于 2009-06-12 04:33:06

顺便说一句,我总是使用setf。如果我稍微改变了代码的结构,我只需要改变“位置”而不是位置和运算符(setq -> setf)。

另外,不用担心性能,对于符号,setf和setq是完全相同的:

代码语言:javascript
复制
CL-USER> (macroexpand '(setf foo 42))
(SETQ FOO 42)
票数 12
EN

Stack Overflow用户

发布于 2009-06-09 18:56:59

您可以在任何可以使用setq的地方使用setf。实际上,setf实际上是一个建立在setq上的宏。所以,这应该是一个纯粹的可读性和风格问题。

我见过的几乎所有的代码都避免使用setq,而是使用setf

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

https://stackoverflow.com/questions/971734

复制
相关文章

相似问题

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