我有一些这样的代码:
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});;
我宁愿不必重复“完整”两次,而是想提出一些内省的方法来将名称作为字符串获取。我认为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: 语法或类似的东西会更通用,在更多领域有用)