gistに書けば良かったかも。 listを一連の流れの連鎖ではなく候補からの選択と捉えてみると、別な形のマクロが思い浮かぶ。 (やり過ぎ良くない…ただ、実験ということで) 例えば、こんな感じ。clojureの->,->>にならい、初期値を取りそれをもとに選択を行うようになっている。 (define (f x p val) (and (p x) val)) (define (QandA Q) (@maybeL Q (f symbol? 'symbol) (f integer? 'int) (f list? 'list) (f identity 'unknown))) (map QandA '(10 aa (aa) #(aa))) ; => (int symbol list unknown) 他の構文とは異質なものなので、それをはっきりさせるために@をつけている。 code (use util