Ocaml从元组列表中返回一个函数

时间:2013-01-28 02:26:35

标签: list function ocaml

我需要将列表转换为函数。我已设法将列表列入元组列表。所以我现在有这样的事情:

[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符号(|)。任何建议将不胜感激。谢谢!

1 个答案:

答案 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"
# 

(实际上makeLookupList.assoc相同,其参数相反。)