メソッドチェイン風マクロ
ネスト深くなるのが嫌で「これでGaucheでもRubyみたいにメソッドつなぎまくっちゃうもんね!」とか思ってこんなの書いた
http://blog.livedoor.jp/dankogai/archives/50994188.html
これなかなかいいじゃん。
マクロ定義
(define-syntax chain (syntax-rules () ((_ e1) e1) ((_ e1 (f e2 ...) e3 ...) (chain (f e1 e2 ...) e3 ...))))
実行例
gosh> (chain 1 (+ 2) (* 3)) 9 gosh> (chain '(1 2 3) (reverse) (append '(4 5))) (3 2 1 4 5)
課題
1つめの引数の場所に前の計算結果を挿入して関数を呼び出すので、consやmapのように2つめの引数にリストを与えるものと相性が悪い。
でも、1引数の関数のこと等を考えるとこの仕様は妥当だし…。