Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2010-10-31

マクロを書くのにもSeriesを使う

| 02:18 | マクロを書くのにもSeriesを使う - わだばLisperになる を含むブックマーク はてなブックマーク - マクロを書くのにもSeriesを使う - わだばLisperになる

マクロを書くのにSeriesを使うというのは、なんとなく抵抗があるので、まずはこういうところから馴れて行くことにしました。

ごちゃごちゃしているので有名なONCE-ONLYで実験。

(import 'fare-utils:WITH-GENSYMS)

(defmacro once-only ((&rest vars) &body body)
  (multiple-value-bind (renames temps)
                       (map-fn '(values symbol symbol)
                               (lambda (var name) 
                                 (values `(,name ,var)
                                         ``(,,var ,,name)))
                               (scan vars)
                               (map-fn 'symbol #'gensym))
    `(let ,(collect renames)
       (with-gensyms ,vars
         `(let (,,@(collect temps))
            ,,@body)))))
;; seriesのリーダーマクロを使った場合
(defmacro once-only ((&rest vars) &body body)
  (multiple-value-bind (renames temps)
                       (#2M(lambda (var name) 
                             (values `(,name ,var)
                                     ``(,,var ,,name)))
                           (scan vars)
                           (#Mgensym))
    `(let ,(collect renames)
       (with-gensyms ,vars
         `(let (,,@(collect temps))
            ,,@body)))))
;; 定義
(defmacro square (x)
  (once-only (x)
    `(* ,x ,x)))

;; 動作
(square (incf x))

;; マクロ展開
(LET ((#:G1239221 (INCF X)))
  (* #:G1239221 #:G1239221))

意外にもONCE-ONLYはすっきり書けました。試してみるもんです。

この先一年の年間ドッグフーディング

| 00:51 | この先一年の年間ドッグフーディング - わだばLisperになる を含むブックマーク はてなブックマーク - この先一年の年間ドッグフーディング - わだばLisperになる

先日までは、「コードは大文字で書く」というのを一年間試してみました。

ちなみに、これは特に実りもありませんでしたが、今年は、

「繰り返し構文はSeriesしか使わない」

で行きます。誰得宣言ですが。

Seriesを常用する上で色々と障害はあるのですが、この辺りをどう解決するかを体験してみます。

ということで、githubに自分の拡張ユーティリティを作成してみることにしました。

来年Seriesに対してどういう考えになっているか楽しみです。