Peter Norvig在page 50上的Paradigms of Artificial Intelligence Programming中提到,当选择使用setq或setf将变量更新为值时,在特异性和一致性之间进行权衡。你有什么建议吗?你有没有遇到过比可读性重要得多的情况?
发布于 2009-06-09 18:56:11
使用setq比较低级,但setf的性能不是问题。setf允许您(或库编写者)提供定制的setf行为,比如设置定制数据结构的某些部分。我要说的是:除非你有理由不这样做,否则请随时随地使用setf。
另请参阅实用Common Lisp,第3章:“SETF宏是Common Lisp的主要赋值运算符。”PCL可在线免费获得:http://gigamonkeys.com/book/
发布于 2009-06-12 04:33:06
顺便说一句,我总是使用setf。如果我稍微改变了代码的结构,我只需要改变“位置”而不是位置和运算符(setq -> setf)。
另外,不用担心性能,对于符号,setf和setq是完全相同的:
CL-USER> (macroexpand '(setf foo 42))
(SETQ FOO 42)发布于 2009-06-09 18:56:59
您可以在任何可以使用setq的地方使用setf。实际上,setf实际上是一个建立在setq上的宏。所以,这应该是一个纯粹的可读性和风格问题。
我见过的几乎所有的代码都避免使用setq,而是使用setf。
https://stackoverflow.com/questions/971734
复制相似问题