我需要将列表转换为函数。我已设法将列表列入元组列表。所以我现在有这样的事情:
[Expr, (Expr, [[T"("; N Expr; T")"]; [N Num]; [N Expr; N Binop; N Expr]; [N Lvalue]; [N Incrop; N Lvalue]; [N Lvalue; N Incrop]]
Lvalue, [[T"$"; N Expr]])]
我希望最终结果看起来像:
(Expr,
function
| Expr ->
[[N Term; N Binop; N Expr];
[N Term]]
| Lvalue ->
[[T"$"; N Expr]])
我主要关注如何实现OR符号(|)。任何建议将不胜感激。谢谢!
答案 0 :(得分:2)
您描述的内容就好像要生成函数的源一样。除非你正在编写某种预处理工具,否则这没有多大意义。
假设你没有在预处理器上工作,你应该考虑你希望函数做什么,而不是它应该具有的文本形式。您可以轻松获得您想要的功能 - 它基本上像List.assoc
功能一样工作。但是你不能通过在运行时为函数创建某个文本形式来实现它。
这是一个将对列表转换为查找函数的函数:
# let makeLookup pairs = fun x -> List.assoc x pairs;;
val makeLookup : ('a * 'b) list -> 'a -> 'b = <fun>
# let f = makeLookup [(1, "yes"); (2, "no")];;
val f : int -> string = <fun>
# f 1;;
- : string = "yes"
# f 2;;
- : string = "no"
#
(实际上makeLookup
与List.assoc
相同,其参数相反。)