我正在寻找fexpr的(现实世界)用途,在这里,它们的使用方式不同于通过惰性评估可以完成的工作。
我能找到的大多数示例都使用fexprs来实现条件求值,比如“短路”和“运算”(求值第一个参数,如果为false,则不求值第二个参数,并直接返回false)。
我正在寻找“有用的”用途,这就是使用fexpr会产生比没有fexpr时更好(更干净)的代码的地方。
最佳答案
使用fexprs有两个主要原因。
第一个是因为它们允许您任意次数地计算参数这使得实现像您建议的那样惰性地评估其参数的运算符成为可能以这种方式构建的构造还能够多次计算它们的参数。这使得通过fexprs实现循环成为可能!
另一种情况是转型。转换代码基本上是在现有LISP之上编写编译器的一种方式。尽管它使用宏而不是fexpr,cl-who是一个可以进行转换的很好的例子。