非平凡的fexpr使用示例

Dan*_*our 6 lisp

我正在寻找fexprs的(现实世界)用法,它们的使用方式与懒惰评估所能达到的方式不同.

我可以找到的大多数示例仅使用fexprs来实现条件评估,例如短路"和"操作(评估第一个参数,如果为false,则不评估第二个并直接返回false).

我正在寻找"有用"的用途,即使用fexpr导致代码比没有fexprs时可以做到的"更好"(更干净).

mal*_*per 2

您想要使用 fexprs 有两个主要原因。

第一个是因为它们允许您任意次数地评估参数。这使得实现像您建议的那样延迟评估其参数的运算符成为可能。以这种方式构建的构造还能够多次评估其参数。这使得通过 fexprs 实现循环成为可能!

另一种情况是转型。转换代码基本上是在现有 Lisp 之上编写编译器的一种方法。尽管cl- who 使用宏而不是 fexprs,但它是可以进行的转换类型的一个很好的示例。