可以在Lisp中使用循环外的“it”命令吗?

时间:2013-07-19 17:12:47

标签: lisp common-lisp syntactic-sugar

我知道在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,但我很好奇是否有一些语法糖可以使我的代码更简洁。

1 个答案:

答案 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