使用锐标点有什么好处?

  • 本文关键字: lisp common-lisp reader
  • 更新时间 :
  • 英文 :


我最近用过cl-ppcre包,我很好奇他们如何优化这个包,因为我想学习优化常见的Lisp。我注意到他们在声明表达式中经常使用 Sharpsign 点,就像这里一样。优化设置在这里。

他们为什么这样写?有什么好处吗?还是某些规则让他们做?

更新: 我跑

(defvar *b* '(optimize speed))
(pprint (macroexpand-1 '(declaim *b*)))
(pprint (macroexpand-1 '(declaim #.*b*))) ;; => this one is right

那么,在宏观调用之前,评估值#.?喜欢它首先评估值并在宏参数中替换它。

锐符号点将在读取时计算下一个表达式。因此,它将充当读者得到结果而其他级别的 CL 不知道这一点。由于计算规则的原因,依赖于文本的宏不能成为动态的,因此读取时间宏将绕过它,并使其成为动态表达式对读取器以外的其他级别的文本。

好处是元编程的额外级别。

查看区别:

CL-USER 7 > (defvar *answer* 42)
*ANSWER*
CL-USER 8 > '(*answer* #.*answer*)
(*ANSWER* 42)

#.允许在读取时计算表达式。结果将从读取器返回 - 而不是原始表达式。

CL-USER 9 > '(*answer* (* #.*answer* pi) #.(* pi *answer*))
(*ANSWER* (* 42 PI) 131.94689145077132D0)

请注意,需要在读取时知道*answer*的值才能完成此操作。

相关内容

  • 没有找到相关文章

最新更新