2

ラケットマクロを定義する方法はありますfooか?

(list 1 (foo 2 3) 4)

に展開します

(list 1 2 3 4)

?

4

2 に答える 2

1

他の回答が述べたように、マクロを複数の値に展開し、それを呼び出しコンテキストにスプライスすることはできません。しかし、準引用符を使用して同様のことを行うことができます。

マクロが代わりにリストを返すように適合されていると仮定すると、これを行うことができます(指定された例に対して):

`(1 ,@(foo 2 3) 4)

例 (Racket でテスト済み):

> `(1 ,@(map sqrt '(2 3)) 4)
'(1 1.4142135623730951 1.7320508075688772 4)
于 2013-10-05T15:19:56.850 に答える