我有这个代码:
datatype 'a Tree = Empty | LEAF of 'a | NODE of ('a Tree) list;
val iL1a = LEAF 1;
val iL1b = LEAF 2;
val iL1c = LEAF 3;
val iL2a = NODE [iL1a, iL1b, iL1c];
val iL2b = NODE [iL1b, iL1c, iL1a];
val iL3 = NODE [iL2a, iL2b, iL1a, iL1b];
val iL4 = NODE [iL1c, iL1b, iL3];
val iL5 = NODE [iL4];
fun treeToString f Node = let
fun treeFun (Empty) = ["(:"]
| treeFun (NODE([])) = [")"]
| treeFun (LEAF(v)) = [f v]
| treeFun (NODE(h::t)) = [""] @ ( treeFun (h)) @ ( treeFun (NODE(t)) )
in
String.concat(treeFun Node)
end;
treeToString Int.toString iL5;
当我运行我的函数时,我得到输出:“32123)231)12)))”。
答案应该是“((32((123)(231)12)))”。
我已经尝试修改我的函数以添加 ( 在我能想到的每个地方,但我无法弄清楚我应该在哪里添加 "("。我在哪里搞砸了?
编辑:我相信我需要在某处使用 map 或 List.filter ,但不确定在哪里。