【发布时间】:2014-12-05 01:56:46
【问题描述】:
我很难弄清楚如何使用 sml 实现二维二叉树
这是我到目前为止所拥有的,但我得到了一个 tycon 不匹配。
datatype btree =
Empty |
Node of int * btree * btree;
fun AddNode (i:int, Empty) = Node(i, Empty, Empty) |
AddNode(i:int, Node(j, left, right)) =
if i = j then Node(i, left, right)
else if i < j then Node(j, AddNode(i, left), right)
else Node(j, left, AddNode(i, right));
fun printInorder Empty = () |
printInorder (Node(i,left,right)) =
(printInorder left; print(Int.toString i ^ " "); printInorder right);
datatype twotree =
Empty |
Node of int * twotree * twotree * btree;
fun Add2Node(int:i, int:j, Empty) = Node(i, btree, Empty, Empty) |
Add2Node(int:i, int:j, Node(k, btree, left, right)) =
if i = k then Node(i, Addnode(j, root), left, right)
else if i < k then Node(k, root, Add2Node(i, j, left), right)
else Node(k, root, left, Add2Node(i, j, right));
val x : btree = AddNode(50, Empty);
val x : btree = AddNode(75, x);
val x : btree = AddNode(25, x);
printInorder(x);
val 最初是为了测试二叉树的第一部分,但一旦我尝试执行 2d 部分,它会与原始 AddNode 产生错误
【问题讨论】:
-
您知道
Empty已经是List结构中的异常名称吗? sml-family.org/Basis/list.html#SIG:LIST.Empty:EXN 另外,为什么你的AddNode只接受btree的Empty而不是任何btree? -
我是 SML 的新手,我可以轻松地用 c++ 或 java 对其进行编程。我只是在从 OOP 过渡到函数式编程时遇到了麻烦@benruudgers
-
你在哪里定义了
Empty?node在哪里定义?你遇到了什么错误?重现它所需的最少代码是多少? -
跳出来的东西:
btree不是一个值,它是一个类型。root这个名字神奇地突然出现。另外,我会避免重用类型构造函数的名称。它变得非常混乱。
标签: 2d binary-tree sml smlnj