Gre*_*ill 10
Paul Graham的On Lisp有一章关于Anaphoric Macros.
从本质上讲,它是编写语句的简便方法,可以避免重复代码.例如,比较:
(let ((result (big-long-calculation)))
(if result
(foo result)))
Run Code Online (Sandbox Code Playgroud)
和
(if (big-long-calculation)
(foo it))
Run Code Online (Sandbox Code Playgroud)
where it是一个特殊的名称,指的是刚才计算的东西(big-long-calculation).
Common Lisp 就是一个例子LOOP:
(loop for item in list
when (general-predicate item)
collect it)
Run Code Online (Sandbox Code Playgroud)
该变量IT具有测试表达式的值。这是 ANSI Common LispLOOP工具的一个功能。
例子:
(loop for s in '("sin" "Sin" "SIN")
when (find-symbol s)
collect it)
Run Code Online (Sandbox Code Playgroud)
回报
(SIN)
Run Code Online (Sandbox Code Playgroud)
因为 only"SIN"是现有符号的名称,此处为 symbol SIN。在 Common Lisp 中,符号名称默认具有内部大写名称。