我最近使用过cl-ppcre软件包,我对它们如何优化此软件包感到非常好奇,因为我想学习优化常见的Lisp。我注意到他们在声明表达式中经常使用Sharpsign Dot,就像这里。优化设置在此处。
他们为什么这样写?有什么好处吗?还是有一些规则要做?
更新:我跑步
(defvar *b* '(optimize speed))
(pprint (macroexpand-1 '(declaim *b*)))
(pprint (macroexpand-1 '(declaim #.*b*))) ;; => this one is right
那么,#.
即使在宏调用之前,eval值也可以吗?像它一样先评估值,然后在宏参数中替换它。
Sharpsign Dot将在读取时评估下一个表达式。因此,它将作为读者获取结果的手段,而CL的其他级别则不知道这一点。由于有评估规则,依赖于文字的宏不能动态化,因此s的读取时间宏将绕过它,并使其成为动态表达式,而对于其他级别的读者来说,其文字则是文字。
好处是可以提高元编程水平。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句