Sml 标准ML中的函数参数错误
我正在尝试实现一个使用此数据类型的函数treeToString:Sml 标准ML中的函数参数错误,sml,ml,Sml,Ml,我正在尝试实现一个使用此数据类型的函数treeToString: datatype Tree = LEAF of string | NODE of Tree list; 这棵树: val L1a = LEAF "a" val L1b = LEAF "b" val L1c = LEAF "c" val L2a = NODE [L1a, L1b, L1c] val L2b = NODE [L1b, L1c, L1a] val L3 = NODE [L2a, L2b, L1a, L1b] val L
datatype Tree = LEAF of string | NODE of Tree list;
这棵树:
val L1a = LEAF "a"
val L1b = LEAF "b"
val L1c = LEAF "c"
val L2a = NODE [L1a, L1b, L1c]
val L2b = NODE [L1b, L1c, L1a]
val L3 = NODE [L2a, L2b, L1a, L1b]
val L4 = NODE [L1c, L1b, L3]
val L5 = NODE [L4]
该函数采用类似treeToString L5
的参数,该参数将输出字符串((cb((abc)(bca)ab))
问题是我无法找出正确的方法来区分函数何时采用叶类型还是节点类型。我写了下面的代码来尝试和测试这一点,但我得到了错误。有人知道这个语法吗?一旦我得到了参数,实际的递归应该很容易
(* treeToString *)
fun treeToString(LEAF str) = str
| treeToString(NODE h::t) =
h;
这个函数就是我用来让它工作的。只是需要在我的论点周围加上括号
fun treeToString f Node = let
fun helperFun (LEAF(v)) = [f v]
| helperFun (NODE(h::t)) = ["("] @ List.concat (map helperFun(h::t)) @ [")"]
in
String.concat(helperFun Node)
end;
更改此项:
| treeToString(NODE h::t) = ...
为此:
| treeToString (NODE (h::t)) = ...
原因是(节点h::t)
可以解释为((节点h)::t)
(其中节点h
是节点列表中的第一项)或(节点(h::t))
,这是您想要的