当前位置:  开发笔记 > 人工智能 > 正文

Lisp风格:setq与setf

如何解决《Lisp风格:setq与setf》经验,为你挑选了3个好方法。

Peter Norvig 在第50页的"人工智能编程范式"中提到了特异性和一致性之间的权衡以及选择使用setq或setf将变量更新为值时的权衡.您有什么推荐的吗?您是否遇到过重要性超出可读性的情况?



1> Harold L..:

使用setq更低级别,但setf的性能不是问题.并且setf允许您(或库编写者)提供自定义setf行为,例如设置自定义数据结构的部分.我说:除非你有理由不去,否则到处都去.

另见Practical Common Lisp,第3章:"SETF宏是Common Lisp的主要赋值运算符." PCL可在线免费获取:http://gigamonkeys.com/book/



2> jrockway..:

FWIW,我总是使用setf.如果我稍微更改了代码的结构,我只需要更改"地点"而不是地点和运算符(setq - > setf).

另外,不要担心性能,setf与符号的setq完全相同:

CL-USER> (macroexpand '(setf foo 42))
(SETQ FOO 42)



3> Ville Laurik..:

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

我见过的几乎所有代码都避免使用setq和使用setf.

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有