Commits

camlspotter  committed 6c2cc72

fix

  • Participants
  • Parent commits 3ceca38

Comments (0)

Files changed (1)

 
 しかしこれは面倒だ。こんな場合のために P4 には $XXX: 式$ という Anti-quotation 記法がある(これが全然ドキュメントされてないのだ…)。この記法を使うと上の式は次のように書き換えることができる::
 
-    let make_add_1 _loc x = <:expr< $int: x$ + 1 >>  (* x の型は int *)
+    let make_add_1 _loc x = <:expr< $int: string_of_int x$ + 1 >>  (* x の型は string。ほんとは int をそのまま埋め込みたいんだけど… *)
 
-$int: x$ は x は int なんだけどそれをよろしくコンテクストに合う AST に変更しちゃってください、という意味だと思えば良い。もっとかっこよく言うと「ホスト言語(Quote の外側)の値から、埋め込み言語(Quote の内側)の AST への変換子」だ。この変換子は(おそらく)次のものが使用できる::
+$int: x$ は x は string なんだけどそれをよろしくコンテクストに合う AST に変更しちゃってください、という意味だと思えば良い。もっとかっこよく言うと「ホスト言語(Quote の外側)の値から、埋め込み言語(Quote の内側)の AST への変換子」だ。この変換子は(おそらく)次のものが使用できる::
 
     <:expr< $x$ >>              (* 普通。x がそのまま使われる *)
     <:expr< $id:x$ >>           (* x : ident を expr にする *)
     <:expr< $lid:x$ >>          (* x : string を IdLid の ident expr にする *)
     <:expr< $uid:x$ >>          (* x : string を IdUid の ident expr にする *)
     <:expr< $str:x$ >>          (* x : string を 文字列 expr にする *)
-    <:expr< $int:x$ >>          (* x : int を 整数 expr にする *)
+    <:expr< $int:x$ >>          (* x : string を 整数 int として解釈し、expr にする *)
     <:expr< $int32:x$ >>        (* 略 *)
     <:expr< $int64:x$ >>        (* 略 *)
     <:expr< $nativeint:x$ >>    (* 略 *)