Modern Scheme (およびその子孫である Racket) は、非常に強力な衛生的なマクロ システムを備えています。quote
私にquasiquote
は、(非衛生的な)マクロを定義するという彼らの歴史的立場を失ってしまったように思えます(私が誤解していなければ、Common Lisp ではまだ行われているように)。実際には言語レポートでは、quote
データquasiquote
、特にリストを構築する便利な方法としてのみ提示されます。確かに、彼女が退屈に耐えられるなら、それらがなくても大丈夫です。たとえば、 の(quote (+ 1 2))
ように書き換えることができ、 のように書き換える(list (quote +) 1 2)
こと(quasiquote (+ (unquote (- 2 1)) 2))
ができます(list (quote +) (- 2 1) 2)
。
ここで、Scheme にシンボルの新しいプリミティブ型を導入するとします。大文字で始まる識別子はシンボルであり、それ以外の場合は変数です。soX
は記号 を意味し、上記の例はおよびx
のように記述できます。(が記号を表しているとしましょう。)とは冗長であると言えますか? それとも何かが恋しいですか?(list Plus 1 2)
(list Plus (- 2 1) 2)
Plus
+
quote
quasiquote
編集:
eval
いくつかのまれなケースではまだ有用なようです: EVAL in SCHEME明確な質問。