我有这样的代码:SML/ML诠释到字符串转换
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,但不知道在哪里。
谢谢你的建议。我意识到我需要映射的东西,但问题是我真的不知道如何在SML中正确映射它。我一直在尝试大约4个小时,但没有真正的教程适合我的情况。我试过“| treeFun(NODE(h :: t))= [”(“] @(map(fn y => y = treeFun(h))[(treeFun(NODE(t)))])@ [“)”]“这样的事情,但得到错误,并尝试了许多其他方法,但卡住了。你可能会贬低我需要做的事情吗?我会继续努力,但任何进一步的建议会帮助我很多。 – user494948 2010-11-08 00:28:30
我已经更新了我的答案,以便更加明确。 – jacobm 2010-11-08 04:41:17
谢谢你的解释,我不知道你可以使用这样的地图功能。这帮助我特别为我创建的另一个功能。 – user494948 2010-11-08 06:22:27