タグ

関連タグで絞り込む (2)

タグの絞り込みを解除

clとgensymに関するkiyo_hikoのブックマーク (2)

  • 変数捕捉と多重評価

    2. 変数捕捉と多重評価 2.1. はじめに 関数の場合は引数は必ず1回評価されるのに対し、 マクロを使うと引数の評価の回数を制御することが出来ます。 このことを充分に認識していないと、意図せず変数を多重評価してしまう危険があります。 また、マクロは展開形が呼び出された場所に貼り付けられるので、展開形の中で不用意な 変数名を使っていると貼り付けられた場所にあった変数名と衝突してしまう危険があります。 これを避けるために、マクロ展開形の中では一意であることが保障されている gensym によって 生成されたシンボル (以下 gensym-symbol) を変数名に使う必要があります。 2.2. マクロ foronlisp の定義 マクロ for を使って多重評価と変数捕捉について説明したいと思います。 On Lisp にはさまざまなテクニックが解説されていますが、ここでは gensym を使

    kiyo_hiko
    kiyo_hiko 2013/07/30
    マクロを作るときに多重評価と変数名の衝突に注意する: (defmacro for ((var min max) &body body) (let ((stop (gensym))) `(do ((,var ,min (1+ ,var)) (,stop ,max)) ((> ,var ,stop)) ,@body))) 的な話。あとwith-gensymsが出ているので、今後学ぶ
  • softuses.com

    kiyo_hiko
    kiyo_hiko 2013/06/16
    メモ。実践CLの8章を読んだ // マクロ作成時の注意点は、引数が左から順に評価されること、評価は一度だけ(letなりdoの初期化なりうまく使って複数回評価を避ける)、展開形にシンボルが必要ならgensym使おうなど。
  • 1