0

I need to convert a list into a function. I've managed to make the list into a list of tuples. So I have something like this now:

[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]])]

I want the final result to look something like:

(Expr,
 function
   | Expr ->
       [[N Term; N Binop; N Expr];
       [N Term]]
   | Lvalue ->
       [[T"$"; N Expr]])

I'm mostly stuck on how I can implement the OR symbols (|). Any advice would be greatly appreciated. Thanks!

4

1 回答 1

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

于 2013-01-28T02:45:16.310 回答