GaucheのQuoting
用語
AST
式
データ
quote
quote,'
ASTを式ではなくデータとして扱う
評価しない
普通に(1 2 3)と書くと、式とみなされ、1は関数であるはずなので、errorになる
listとして扱いたい場合は、「これはデータだぞ」として明示する必要がある
quoteを使って'(1 2 3)と、書くことで明示できる
quasiquote
quasiquote,\`
ただ単に\`を付けただけでは、quoteと全く同じ動作をする
unquoteと組み合わすことで、初めて挙動が変わる
quoteした中の一部だけを評価したい場合に使える
\`(* 3 ,(+ 1 2))と書くことで、quoteしつつも,の次の式を評価し、(* 3 3)というデータを得る
templateと見なすことができる
unquoteされる箇所以外は固定のtemplateで、unquoteの部分のみが変数になっている感じ
JSで書くなら、\`(3 * ${1 + 2})\`みたいな感じ
macroとともに使うのかmrsekut.icon
unquote
,
quasiquoteの中で使う
「quoteの中なのでデータのはずだが、ここだけ評価する」みたいな挙動になる
unquote-splicing
,@
unquoteしたあとにconcatする感じ
code:gauche
(quasiquote (a (unquote lst) d))
; (a (b c) d)
(quasiquote (a (unquote-splicing lst) d))
; (a b c d)
↑このコードはgaucheで試してないので間違っtるかもmrsekut.icon
わかりやすいmrsekut.icon
ネット上の記事見てもイミフだったがここ読めばわかた
unquote-splicing載ってない?
初見はイミフだった