On Lisp 第14章 アナフォリックマクロ
 アナフォリックって何かと思ったら、要は Perl の $_ に相当するものだとのこと。考え方自体は割と単純。試しに、aif を Ruby でそれっぽく実装してみると、こんな感じか。
def aif(test, &then_form)
@it = test
if @it
then_form.call
end
end

aif 'a' do
puts @it #=> a
end

ただ、else は簡単には再現できそうにない。この辺りでマクロの強力さを思い知る。

  - アナフォラ => 「それ」、「it」、Perl の $_
- 意図的にシンボル it を補足する
- 意図的に変数補足を行うマクロのエクスポート
=> 補足されるシンボルのエクスポートも必要
* パッケージ foo 内の (捕捉される) it は、フルネームでは foo:it

14.1 アナフォリックな変種オペレータ
- アナフォリックな if, when, while, and, cond, lambda, block の例

14.2 失敗
- 真、偽、失敗の判別
=> 多値を利用する
* gethash は、第一返り値がデータ、第二返り値が成功 or 失敗の表現
3通りの場合を判別するイディオム (マクロによる隠蔽が有効)
(defun edible? (x)
(multiple-value-bind (val found?) (gethash x edible)
(if found?
(if val 'yes 'no)
'maybe)))


# 関数をクロージャとして使うテクニック (イディオム?)
# 図14.4 で gensym の複数回評価を避けるために使用
(let ((x 0))
(defun inc ()
(setq x (1+ x))))
(inc) ;=> 1
(inc) ;=> 2
(inc) ;=> 3


14.3 参照の透明性
- Gelernter と Jagannathan の (プログラミング言語に対する) 定義
1. どの部分式も、値の等しい別の式に置き換えることができる
2. 同一コンテキスト内では、同じ式はどこで何回使われても同じ値を返す



On Lisp
Paul Graham

4274066371
オーム社 2007-03
売り上げランキング : 82240
おすすめ平均 star

Amazonで詳しく見る
by G-Tools
[PR]
by fkmn | 2009-12-02 23:55 | 一人読書会
<< On Lisp 第15章 関... On Lisp 第13章 コ... >>


とあるWebアプリケーションエンジニアの日記
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
カテゴリ
以前の記事
ブログパーツ
リンク
検索
タグ
最新のトラックバック
プログラミングが「出来る..
from とりあえず9JP?
Genographic ..
from ナンジャモンジャ
ジュセリーノ
from ありの出来事
くちこみブログ集(ライフ..
from くちこみブログ集(ライフ)(..
以降、丁寧語で行こう!
from エッセイ的な何か
その他のジャンル
ファン
記事ランキング
ブログジャンル
画像一覧

fkmnの最近読んだ本 フィードメーター - フッ君の日常 あわせて読みたい AX