List Ocaml从元组列表返回函数

List Ocaml从元组列表返回函数,list,function,ocaml,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 ->

我需要将列表转换为函数。我已经设法把这个列表变成了一个元组列表。所以我现在有这样的东西:

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

您正在描述一些事情,就好像您想要生成函数的源代码一样。除非您正在编写某种预处理工具,否则这没有多大意义

假设您没有使用预处理器,您应该考虑您希望函数做什么,而不是它应该具有的文本形式。您可以很容易地获得您想要的功能——它的工作原理基本上类似于
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 pairs=fun x->List.assoc x pairs;;
val makeLookup:('a*'b)列表->'a->'b=
#设f=makeLookup[(1,“是”);(2,“否”)];;
val f:int->string=
#f1;;
-:string=“是”
#f2;;
-:string=“否”
# 

(事实上,
makeLookup
List.assoc
相同,参数相反。)

这看起来像是对解析器、解释器或编译器实现的未知尝试,很难说是哪个。如果你告诉我们你想做什么会有帮助的。很可能会有更好的方法。