在 FSharp 中,我想做以下事情
给定一个类型:
type FsTree = Node of (string * FsTree) list
我想定义一个谓词 toStringList 以便:
toStringList myFsTree
给出以下结果
结果 :
[
["n1"];
["n2"; "sub_n2_1"];
["n2"; "sub_n2_2"];
["n3"; "sub_n3"; "sub_sub_n3_1"];
["n3"; "sub_n3"; "sub_sub_n3_2"];
["n3"; "sub_n3"; "sub_sub_n3_3"];
["n4"];
]
在哪里
let myFsT = Node [
("n1", Node []);
("n2", Node [
("sub_n2_1", Node []);
("sub_n2_2", Node [])
]);
("n3", Node [
("sub_n3", Node [
("sub_sub_n3_1", Node []);
("sub_sub_n3_2", Node []);
("sub_sub_n3_3", Node []);
])
]);
("n4", Node [])
]
我到目前为止所做的(如下)绝对不正确,我知道。但我真的被困在这里了!有谁知道该怎么做?
let rec test (fst:FsTree) =
match fst with
| Node [] -> []
| Node ((str, subFst)::restNode) ->
[[str] @ (test subFst)] @ (test restNode)