1

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

4

1 回答 1

11

lisp-y 的答案是,谁在乎是否没有语法,只需添加您自己的。

(defmacro awhen (test &body body)
    `(let ((it ,test))
          (when it ,@body)))

然后使用它

(awhen (expensive-computation)
       (format t "~a~%" it))

这类宏通常以“a”为前缀,表示照应。有关aifPaul Graham 在 On Lisp 中的示例,请参阅。

于 2013-07-19T17:22:50.740 回答