私はこのコードを持っています:
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を使用する必要があると思いますが、どこで使用するかわかりません。