2017-03-09 9 views
0

私は以下のSchemeマクロを書いています。Schemeマクロでパターンシーケンスをテナントにする方法は?

(define-syntax join 
    (syntax-rules() 
    ((join (var ...) (val ...) ...) 
    '(((var val) ...) 
     ...)))) 

私はそれが次の結果を返します

(join (a b c) 
     (1 2 3) 
     (2 4 6) 
     (3 6 9)) 

を試してみてください。

(((a 1) (a 2) (a 3)) 
((b 2) (b 4) (b 6)) 
((c 3) (c 6) (c 9))) 

私の意図は、以下の結果を返すマクロを書くことでした。

(((a 1) (b 2) (c 3)) 
((a 2) (b 4) (c 6)) 
((a 3) (b 6) (c 9))) 

パターンマッチャーが変数varを項目化する方法をどのように転置しますか?


更新:1以上の インスタンスに続くサブパターンで発生

パターン変数:私はこの問題のjoinマクロがR7RS 4.3.2による違法であることを、言われたの識別子ellellisis 012はサブテンプレート にのみ許可され、その後にはellellisis asのインスタンスが多く続きます。

答えて

0

申し訳ありませんが、私はそれを自分で持っています。これはうまくいくようです。

(define-syntax join 
    (syntax-rules() 
    ((_ var val ...) 
    (let-syntax ((j (syntax-rules :::() 
         ((_ (k :::) (v :::)) 
         '((k v) :::))))) 
     `(,(j var val) ...))))) 
関連する問題