私はこのようなコードを持っています:
type boolean = T | F
type bexp = Const of boolean
| Var of variable
| Bop of bop * bexp * bexp
| Not of bexp
and bop = And | Or | Xor
and variable = { name: string; mutable value: boolean }
後で変数を作成したい場合は、次のことを行う必要があります。
let full = Var({name ="full"; value = F});;
'full'を2回繰り返す必要はなく、名前を文字列として取得するための内省的な方法を考え出したいと思います。camlp4がこれに役立つと思いますが、どこから始めればよいのかわかりません。
したがって、最終的には、次のようなことができるようになりたいと思います。
let full = Var({name = :letname:; value = F});;
ここで、:letname:は、現在のletバインディングを(この場合は「full」)の代わりに文字列として入力します。(構文:letname:は単なる提案であり、OCamlの構文と衝突しない構文の他のアイデアですか?)
このようなより簡潔な構文がおそらく望ましいでしょう:
var full = F
その後、次のように拡張されます。
let full = Var({name = "full"; value = F});;
これはcamlp4で行うことができますか?もしそうなら、どうすればよいですか?
(さらに検討すると、:letname:構文などは、より汎用的で、より多くの領域で役立ちます)