quasiquote
`(`(,,@(list 1 2)))の結果がguile,gauche派とmit-scheme,scheme48,pltscheme派で真っ二つなんだが。どうしよう。僕のはどっちにつこうか。
2011-03-31 14:02:18@aharisu 外側の`と内側の,@が対応するんですが、それを展開すると(unquote 1 2) が出てきてしまい、これが未定義動作なのが問題なのかな?
2011-03-31 15:28:18@anohana そうです。,@を 展開する派としない派があるというはなしです。r5rsの仕様的にはどちらかが正しい動作なのか、そもそも未定義なのか。わかりかねてる所です。
2011-03-31 16:05:38@aharisu r5rsのquasiquoteの仕様はそもそも不完全だと思うんですが、Gaucheではこれは未定義と解釈したような気がします。r6rsではunquoteが任意の数の式を取れるため、明確に定義されると思います。
2011-03-31 16:45:10ところで、list, quote, quasiquote, unquote, unquote-splicingでは書けて、'`,,@では書けない、という状況はありえるんでしょうか。
2011-05-11 23:44:41gauche,scheme48,sbcl,clispのそれぞれで (let ((a '(1 2 3))) (write ``((,a) (,,@a) (,@,a) (,,a)))) の結果が違う…。特にgaucheで,,@aが期待通り展開されなかったんだけど、何か勘違いしてる??
2011-05-12 01:43:40@valvallow (list 'unquote 'a) みたいな、 quasiquote がらみのは ' ` , ,@ では書けないと思います
2011-05-12 06:37:17自作処理系に (let ((a '(1 2 3))) (write ``((,a) (,,@ a) (,@,a) (,,a)))) 食わせたらエラー吐いた><
2011-05-12 13:19:19RT @kikuchan98: gauche,scheme48,sbcl,clispのそれぞれで (let ((a '(1 2 3))) (write ``((,a) (,,@a) (,@,a) (,,a)))) の結果が違う…。特にgaucheで,,@aが期待通り展開されなかったんだけど、何か勘違いしてる??
2011-05-12 13:34:22ちなみに、 R6RS だと unquote や unquote-splicing に複数の式を渡せるようになっている http://www.r6rs.org/final/html/r6rs/r6rs-Z-H-14.html#node_sec_11.17
2011-05-12 13:47:33R5RSに普通に書いてあった. "準引用形式は入れ子にしてもよい。置換は,最外のバッククォートと同じ入れ子レベルで現れる被 unquote 要素に対してだけ行われる。入れ子レベルは,準引用に入って行くたびに1だけ増え,unquote される要素に入って行くたびに 1だけ減る。"
2011-05-12 13:56:48よく見るとquasiquoteのネストに関してunquote-splicingについてあまり言及されてないように見えるけど,unquoteと同様に扱えばいいんだよね
2011-05-12 14:21:28http://lists.scheme-reports.org/pipermail/scheme-reports/2011-April/000448.html を読むと Common Lisp と Scheme だと入れ子の quasiquote の動作が違うのかな
2011-05-12 14:39:282011 apr 10 以降の gauche なら % ./gosh -ftest gosh> (define a '(a b)) a gosh> ``,,@a `(unquote a b) gosh>
2011-05-12 15:06:51RT @_enami: 2011 apr 10 以降の gauche なら % ./gosh -ftest gosh> (define a '(a b)) a gosh> ``,,@a `(unquote a b) gosh>
2011-05-12 15:17:41RT @_enami: 2011 apr 10 以降の gauche なら % ./gosh -ftest gosh> (define a '(a b)) a gosh> ``,,@a `(unquote a b) gosh>
2011-05-12 15:20:29unquote を多引き数に拡張して、さらに `(unquote 1 2) を多値を返すようにして——みたいな話。これは…… http://lists.scheme-reports.org/pipermail/scheme-reports/2011-May/000609.html
2011-05-13 01:51:20チェックが抜けてて `(unquote 1 2) => 1 になってた.パターンマッチがあれば簡潔に書けるだけでなく,この手の漏れも軽減できそう.
2011-05-13 02:17:45