2011年1月16日日曜日

Macro-Defining Macros をEmacsで試した

Onlisp: Macro-Defining Macros に書いてある例題は、Emacs(GNU Emacs 23.1.1 (i386-mingw-nt6.1.7600))でも使えた。長い名前をもつマクロを省略表記するための、"abbrev"というマクロ。いわゆるマクロを定義するマクロ。

abbrev
(defmacro abbrev (short long)
  `(defmacro ,short (&rest args)
     `(,',long ,@args)))
multiple-value-bind を mvbind に省略
(abbrev mvbind multiple-value-bind)
mvbind

;mvbindを強引に使ってみた例(与えられた数の商、剰余を出力)
((lambda (x y)
   (labels ((devide (x y) (list (/ x y) (% x y)))) ;商、剰余のリストを返す関数
     (mvbind (q r)
            (devide x y)
            (format "quotient: %d, remainder: %d" q r) )))
 ; 2011割る3を試してみる
 2011 3)
"quotient: 670, remainder: 1"
destructuring-bind を dbind に省略
(abbrev dbind destructuring-bind)
dbind

;dbindを強引に使ってみた例(与えられたリストからhtmlのaタグを生成)
((lambda (lst)
   (dbind
    (title href)
    lst
    (format "<a href=\"%s\" title=\"%s\">%s</a>" href blog blog))) ;リストの要素をaタグに変換
 '("title1" "http://dminor11th.blogspot.com/"))
"<a href=\"http://dminor11th.blogspot.com/\" title=\"blog\">blog</a>

0 件のコメント:

コメントを投稿