【发布时间】:2016-05-21 05:24:58
【问题描述】:
我对 F# 比较陌生,并且在解析包含嵌套列表的表达式树时确实遇到了困难。从网上的点点滴滴,我拼凑了以下内容。
我的标准类型已定义:
type Return =
| Real of float
| Func of string * Return list
我对外部应用程序进行了函数调用,它返回如下内容:
val out : Return =
Func
("List",
[Func ("List",[Real 1.0; Real 2.0; Real 3.0]);
Func ("List",[Real 1.0; Real 2.0; Real 3.0]);
Func ("List",[Real 1.0; Real 2.0; Real 3.0])])
我需要解析成
[ [1.0; 2.0; 3.0] ; [1.0; 2.0; 3.0] ; [1.0; 2.0; 3.0] ]
我最初的幼稚想法是
let rec parse data =
match data with
| Real(y) -> y
| Func("List", x) -> x |> List.map parse
| _ -> failwithf "Unrecognised"
但它抱怨类型差异,我现在明白了。
我的第二个想法是可能使用一些递归 List.fold (因为我可以折叠 Reals 列表并获取内部列表,但无法弄清楚如何在没有编译器抱怨的情况下将其概括为递归函数类型)。超越我目前的智力火力。
我的第三个想法是,也许我从外部应用程序获得的回报让这变得太难了,因为元组 fst 中没有关于元组 snd 中的内容的指示,除了它是一个“列表什么”?
有这个:Convert tree to list,但它和我正在尝试的解决方案一样神秘。
任何关于我追求的途径的指针都将非常感激。
【问题讨论】:
标签: f# expression-trees