quasiquote
(list 'unquote 'a) は `(,'unquote a) で書けた。嬉しいかどうかは別として https://twitter.com/#!/dico_leque/status/68429494444244992
2011-05-13 02:20:29機械的に変形したら `(,'quasiquote ((,'unquote ',q) ,@ ys)) みたいな書き方がひねり出された
2011-05-13 02:44:14とりあえず理解したところでは、 R5RS では ``((,,@'(1 2)) みたいなのは `((unquote 1 2)) と展開されて、これを eval するとエラーになる。こんな風に R5RS では入れ子の ` 内で ,@ を使おうとするとときどきハマるというのが問題みたい
2011-05-13 08:15:55RT @dico_leque: とりあえず理解したところでは、 R5RS では ``((,,@'(1 2)) みたいなのは `((unquote 1 2)) と展開されて、これを eval するとエラーになる。こんな風に R5RS では入れ子の ` 内で ,@ を使おうとするとときどきハマるというのが問題みたい
2011-05-13 08:28:13http://bit.ly/kZv8xr の Al Petrofsky の方法は、 ``(,,@'(a b)) みたいな場合に、 ,@ の外側が , や ,@ であった場合は、複数の , または ,@ に展開して `(,a ,b) のようにする。 unquote 等は1引数のまま
2011-05-13 12:38:07多重quasiquoteといったらLet Over Lambdaの梯子の上下移動。ところで、quasiquoteってクアシクオート?クアジクオート?
2011-05-13 13:49:36http://www.oxfordadvancedlearnersdictionary.com/dictionary/quasi によれば、クワジクォートかクェイザイクォートあたりでしょうか。ついついクァシクォートと言ってしまって直らない
2011-05-13 14:03:35RT @valvallow: 「quasiquote」をトゥギャりました。 http://togetter.com/li/134984
2011-05-13 14:27:49@valvallow quasiquoteの話これが関係するかもしれません。 RT @anohana: @aharisu 外側の`と内側の,@が対応するんですが、それを展開すると(unquote 1 2) が出てきてしまい、これが未定義動作なのが問題なのかな?
2011-05-13 14:49:21@valvallow 続き RT @anohana: @aharisu r5rsのquasiquoteの仕様はそもそも不完全だと思うんですが、Gaucheではこれは未定義と解釈したような気がします。r6rsではunquoteが任意の数の式を取れるため、明確に定義されると思います。
2011-05-13 14:50:28RT @valvallow: 「quasiquote」をトゥギャりました。 http://togetter.com/li/134984
2011-05-13 14:55:03@dico_leque @valvallow `,',a じゃだめですか。左側の,が`と対応してはずれて、',aが出てきて、クオートだから素直に中身だけが出てきて、,aとなる。
2011-05-13 15:20:44@anohana @valvallow あ、 'a の場合だとそれで行けますね。もともとのは quote なしの (list 'unquote x) みたいな意図のつもりだったんですが書き間違えてました
2011-05-13 15:33:54@dico_leque @valvallow ああそうか。CLでは`,はread時に解釈されて「リストを作るコード」へと展開されるため、対応する`が無い,を書くことができない。`,',a はエラーになる。Schemeでは`,は単なるS式の略記で、評価される時に始めて意味を持つ。
2011-05-13 15:42:49@dico_leque @valvallow ああそうか。それは悩んだことある。左側のunquoteを残して右側のunquoteに結びつけたいんですよね。どうしたんだっけなあ。結局 'unquote を入れたんだったか。
2011-05-13 15:45:42@dico_leque @valvallow 思い出した。前提として、unquoteが意味を持つのはquasiquoteの中だけなので、「quasiquoteを伴わないunquoteを生成する」ということは考えない。これでCLと共通して議論できる。(続く)
2011-05-13 17:53:53@dico_leque @valvallow そんで、一度展開した結果が`....,<x> になるとして、<x>の部分を最初の展開で置き換えたければ ``....,',a、<x>の部分を最初の展開では置き換えずに次の展開で置き換えたいなら ``...,,'a、これがイディオム。
2011-05-13 17:56:07