メソッドチェイン風マクロ

ネスト深くなるのが嫌で「これで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引数の関数のこと等を考えるとこの仕様は妥当だし…。

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy