人気ブログランキング | 話題のタグを見る
On Lisp 第12章 汎変数
 setf に絡むマクロの章。
 何となく基本テクニックっぽい感じがするのは気のせいか。

12.1 汎変数という概念
- インバージョン: 値を求める式からアサーションへの変換
- アサーション: 成り立つべき条件
- Common Lisp で頻繁に使われるアクセス関数 (car, cdr, nth, aref, etc...) には、
インバージョンに当たるものがあらかじめ定義されている
- 汎変数: setf の第一引数として機能する式

12.2 複数回の評価に関わる問題
- define-modify-macro
- arg1, 定義したいマクロの名前
- arg2, 汎変数以外に取る付加的な引数
- arg3, 汎変数の新しい値を返す関数 (名)

12.3 さらに複雑なユーティリティ
- get-setf-method, 汎変数の値をいじくるための情報を返す関数
# 注、ANSI Common Lisp の標準は、get-setf-expansion
# 参考: 代入を簡略化するマクロ
- (get-setf-method '(aref a (incf i))
;;=> (#:G3430 #:G3431) ; 一時変数のリスト
;; (A (INCF I)) ; 一時変数にそれぞれ代入すべき値のリスト
;; (#:G3432) ; 変更後の値を入れるための一時変数
;; (SYSTEM::STORE #:G3430 #:G3431 #:G3432) ; この束縛のもとで行うべき代入操作
;; (AREF #:G3430 #:G3431) ; 変更前の汎変数の値を返す式

12.5 インバージョンを定義する
- defsetf, インバージョン定義マクロ
defmacro と違い、引数のために自動的に gensym を生成する
- defun でも、setf に対するインバージョンを直接定義できる (CLTL2 準拠の場合)
- 非対称なインバージョンも定義可能
- アクセス用の式とそのインバージョンは、同じデータに対して働く必要は無い



On Lisp
Paul Graham

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

Amazonで詳しく見る
by G-Tools
by fkmn | 2009-11-25 23:55 | 一人読書会
<< Shibuya.pm #TT ... On Lisp 第11章 古... >>


とあるWebアプリケーションエンジニアの日記

by fkmn
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 31
カテゴリ
以前の記事
ブログパーツ
'); addEvent( window , 'load' , function(){ blog_tw.start();});
リンク
検索
タグ
最新のトラックバック
その他のジャンル
ファン
記事ランキング
ブログジャンル
画像一覧

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