quasiquote

quote quasiquote unquote unquote-splicing 特にgaucheのquasiquoteの挙動について
0
でこれき @dico_leque

(list 'unquote 'a) は `(,'unquote a) で書けた。嬉しいかどうかは別として https://twitter.com/#!/dico_leque/status/68429494444244992

2011-05-13 02:20:29
でこれき @dico_leque

でもまあ結局は unquote とかは 'unquote と書かなきゃいけないけど

2011-05-13 02:24:02
でこれき @dico_leque

機械的に変形したら `(,'quasiquote ((,'unquote ',q) ,@ ys)) みたいな書き方がひねり出された

2011-05-13 02:44:14
でこれき @dico_leque

とりあえず理解したところでは、 R5RS では ``((,,@'(1 2)) みたいなのは `((unquote 1 2)) と展開されて、これを eval するとエラーになる。こんな風に R5RS では入れ子の ` 内で ,@ を使おうとするとときどきハマるというのが問題みたい

2011-05-13 08:15:55
超電磁ねこきっく @finalfusion

RT @dico_leque: とりあえず理解したところでは、 R5RS では ``((,,@'(1 2)) みたいなのは `((unquote 1 2)) と展開されて、これを eval するとエラーになる。こんな風に R5RS では入れ子の ` 内で ,@ を使おうとするとときどきハマるというのが問題みたい

2011-05-13 08:28:13
でこれき @dico_leque

http://bit.ly/kZv8xr の Al Petrofsky の方法は、 ``(,,@'(a b)) みたいな場合に、 ,@ の外側が , や ,@ であった場合は、複数の , または ,@ に展開して `(,a ,b) のようにする。 unquote 等は1引数のまま

2011-05-13 12:38:07
ばばろあ @valvallow

多重quasiquoteといったらLet Over Lambdaの梯子の上下移動。ところで、quasiquoteってクアシクオート?クアジクオート?

2011-05-13 13:49:36
けろきゃ @k6ky

Gaucheのquasiquoteには悩んだことがあったけど,あれはGaucheが正しかったのか.

2011-05-13 13:57:21
でこれき @dico_leque

http://www.oxfordadvancedlearnersdictionary.com/dictionary/quasi によれば、クワジクォートかクェイザイクォートあたりでしょうか。ついついクァシクォートと言ってしまって直らない

2011-05-13 14:03:35
あはりす @aharisu

@valvallow quasiquoteの話これが関係するかもしれません。 RT @anohana: @aharisu 外側の`と内側の,@が対応するんですが、それを展開すると(unquote 1 2) が出てきてしまい、これが未定義動作なのが問題なのかな?

2011-05-13 14:49:21
あはりす @aharisu

@valvallow 続き RT @anohana: @aharisu r5rsのquasiquoteの仕様はそもそも不完全だと思うんですが、Gaucheではこれは未定義と解釈したような気がします。r6rsではunquoteが任意の数の式を取れるため、明確に定義されると思います。

2011-05-13 14:50:28
kaki @gengar68

RT @valvallow: 「quasiquote」をトゥギャりました。 http://togetter.com/li/134984

2011-05-13 14:55:03
このツイートは権利者によって削除されています。
Shiro Kawai @anohana

@dico_leque @valvallow `,',a じゃだめですか。左側の,が`と対応してはずれて、',aが出てきて、クオートだから素直に中身だけが出てきて、,aとなる。

2011-05-13 15:20:44
でこれき @dico_leque

@anohana @valvallow あ、 'a の場合だとそれで行けますね。もともとのは quote なしの (list 'unquote x) みたいな意図のつもりだったんですが書き間違えてました

2011-05-13 15:33:54
Shiro Kawai @anohana

@dico_leque @valvallow ああそうか。CLでは`,はread時に解釈されて「リストを作るコード」へと展開されるため、対応する`が無い,を書くことができない。`,',a はエラーになる。Schemeでは`,は単なるS式の略記で、評価される時に始めて意味を持つ。

2011-05-13 15:42:49
Shiro Kawai @anohana

@dico_leque @valvallow ああそうか。それは悩んだことある。左側のunquoteを残して右側のunquoteに結びつけたいんですよね。どうしたんだっけなあ。結局 'unquote を入れたんだったか。

2011-05-13 15:45:42
kaki @gengar68

unquoteって書きたくないだけなら `(,(car ',_) ,a) でできるけど,これは反則かな

2011-05-13 16:01:22
Shiro Kawai @anohana

@dico_leque @valvallow 思い出した。前提として、unquoteが意味を持つのはquasiquoteの中だけなので、「quasiquoteを伴わないunquoteを生成する」ということは考えない。これでCLと共通して議論できる。(続く)

2011-05-13 17:53:53
Shiro Kawai @anohana

@dico_leque @valvallow そんで、一度展開した結果が`....,<x> になるとして、<x>の部分を最初の展開で置き換えたければ ``....,',a、<x>の部分を最初の展開では置き換えずに次の展開で置き換えたいなら ``...,,'a、これがイディオム。

2011-05-13 17:56:07