タグ

macroに関するmadpieroのブックマーク (5)

  • Common Lisp マクロを書くときにおろそかにしてはいけないこと - cranebirdの日記

    他にも沢山ありそうですが、最初の方にひっかかったことを列挙。 シンボルが何なのか。変数名みたいなものと曖昧に思っているとつまづく。パッケージと関連していることを意識すること。 keyword がなぜ便利か、理解する。マクロを書いたパッケージと違うパッケージでマクロを展開してみる。 リスト処理をパズルと思っておろそかにしていると、よくない。プログラムを書くプログラム(つまりマクロ)は、結局リスト処理そのもの、ということを忘れない。 read関数とリードテーブル。 ラムダリスト。各種のパラメーター &key &rest を綺麗に使えば、リスト処理を簡潔にできる。 クォート。何が評価されて何が評価されないのか? 見た目。emacs のインデントはカスタマイズできるので、自作マクロのインデントが汚くても悩まない。 以下はむしろ強調されているのであまり引っ掛からなかった。 変数捕捉。ちゃんと gen

    Common Lisp マクロを書くときにおろそかにしてはいけないこと - cranebirdの日記
  • Common Lisp Loop マクロはミニ言語 - cranebirdの日記

    loop マクロは、知れば知るほど繰り返し処理のためのミニ言語だということが分かってくる。 最近覚えたのは、ループ内のローカル変数の使い方。 var x from n to m と書けば数列を生成するが、 to 以降は省略可能。ファイルを行単位で読みながら、行数を数えたりする時など、範囲が分からないときに便利。map系の高階関数に無名関数渡すより、見やすいかも。 誰か なんでも再帰 に対抗すべく? なんでもloop を書いてほしい。豊かな繰り返し処理に必要なのは優しい構文なんかじゃない、繰り返しを記述する能力を持った専用の「言語」だったんだよ! ちなみに仕様書をちゃんと読むとちゃんと書いてある、それこそが loop マクロのいいところ。

    Common Lisp Loop マクロはミニ言語 - cranebirdの日記
  • Scheme:マクロの効用

    普通のやつらの上を行けでLispにおけるマクロの効用が述べられているが, 「じゃあ具体的にマクロを使って『こりゃ便利だ』っていう例を見せてよ」 と言われてもなかなかすぐに出て来ない。 そこで、なんかいいマクロの使用例を思い付いたら書いてってみるコーナー。 通りすがりのマクロ初心者です。便利なマクロの具体例はすごく知りたいので、この項、期待してます。 Paul Graham「On Lisp」を読書中でなかなか良いけど、日語の解説があった方が理解が早まるので。 もくじ マクロを使う局面定型パターンの簡略化関数呼び出しのインライン展開の代用新しい構文による抽象化ミニ言語の埋め込み宣言的なコードに見せるコンパイル時の処理具体例クラス定義でのリーダーの生成リストの内包表記 (List comprehension)リストの構築他の処理系の移植 関連:Scheme:マクロの危険 マクロを使う局面 なん

    Scheme:マクロの効用
  • The why of macros

    madpiero
    madpiero 2012/07/17
    "The macro system is your in-language interface to the compiler." hacker-newsのマクロに関する投げっぱなし分析(これ自体良さげ)を元にした言いっぱなし議論。rdmという人のマクロに関するコメントが書き方といい、悟ってる感満載でいい
  • Macros in Clojure

    4. マクロとは when if = print print = do nil mod 0 "Fizz" "Buzz" mod 0 print print x 15 x 15 "Fizz" "Buzz" (if (= (mod x 15) 0) (when (= (mod x 15) 0) (do (print “Fizz”) (print “Fizz”) (print “Buzz”)) (print “Buzz”)) nil) 構文木を組み替えるための仕組み →自由に構文を作ることができる仕組み

    Macros in Clojure
    madpiero
    madpiero 2012/06/11
    ポイントが整理されていてとても参考になります。Clojure Programming(oreilly) のマクロの章読む前にこれ見とけば良かった...
  • 1