0

次の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変数をアイテム化する方法をどのように転置しますか?


更新:join R7RS 4.3.2 によれば、この質問のマクロは違法であると言われました。

識別子 ⟨ellipsis⟩ の 1 つ以上のインスタンスが続くサブパターンで発生するパターン変数は、⟨ellipsis⟩ のインスタンスが続くサブテンプレートでのみ許可されます。

4

1 に答える 1