1

Lisp ループでは、Gigamonkeys の次の例のように、特別な変数 "it" を使用できることを知っています。

(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 らしい答えは、構文がなくても気にしないで、独自の構文を追加するだけです。

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

そしてそれを使う

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

このクラスのマクロには、アナフォリックを表す "a" がプレフィックスとして付けられることがよくあります。aifOn Lisp の Paul Graham の例を参照してください。

于 2013-07-19T17:22:50.740 に答える