質問

私は、Common Lispのマクロを書いてきたので、SchemeのR5RSのマクロは、私には少し不自然です。私はが考えるの私は1つの構文規則のベクトルパターンを使用する方法を理解していないことを除いて、私は、アイデアを得ます:

(define-syntax mac
  (syntax-rules ()
    ((mac #(a b c d))
     (let ()
       (display a)
       (newline)
       (display d)
       (newline)))))

(expand '(mac #(1 2 3 4)))  ;; Chicken's expand-full extension shows macroexpansion

=> (let746 () (display747 1) (newline748) (display747 4) (newline748))

は、私はベクトルとして書かれる引数を必要とするマクロを使用したいかが表示されません

(mac #(1 2 3 4))
=>
1
4

はこれらのパターンを使用する技術のいくつかの種類がありますか?

ありがとうございます!

役に立ちましたか?

解決

マクロのかもしれないがベクトルとして書かれる引数を必要とし、まだ彼らはときに役立つ行動を提供していません。最も顕著な例は、おそらく準クォートになります:

;; a couple of test variables
(define foo 1)
(define bar 2)

;; vector literals in Scheme are implicitly quoted
#(foo bar) ; returns #(foo bar), i.e. a vector of two symbols

;; however quasiquote / unquote can reach inside them
`#(,foo ,bar) ; returns #(1 2)

別の例として、ベクトルに一致することができこのパターンマッチングパッケージを参照したがって、そのマクロ定義(リンク先のページ一緒にパッケージメタデータとに含まれている)のベクトルパターンを使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top