我知道在Lisp循环中,可以使用特殊变量“it”,如Gigamonkeys中的示例所示:
(loop for key in some-list when (gethash key some-hash) collect it)
我想知道除了使用let显式存储它之外是否还有一个等效的概念,如下所示:
(let ((result (foo input)))
(when result (push result acc)))
我可以使用let,但我很好奇是否有一些语法糖可以使我的代码更简洁。
答案 0 :(得分:11)
lisp-y答案是,谁在乎是否有语法,只需添加自己的语法。
(defmacro awhen (test &body body)
`(let ((it ,test))
(when it ,@body)))
然后使用它
(awhen (expensive-computation)
(format t "~a~%" it))
这类宏通常以" a"为前缀。用于照应。有关Paul Lisham在On Lisp中的示例,请参阅aif
。