Sml 如何在ML编程语言中定义具有多种类型的树
我被要求做下一件事: 要定义可包含两种不同类型的二叉树:('a,'b)abtree,以下是要求:Sml 如何在ML编程语言中定义具有多种类型的树,sml,ml,Sml,Ml,我被要求做下一件事: 要定义可包含两种不同类型的二叉树:('a,'b)abtree,以下是要求: 任何内部顶点(不是叶)必须为“a”或“b”类型,且叶没有值 对于树中的每个路径,所有“a”值必须出现在“b”值之前:路径示例: 'a->'a->'a-'b (legal) 'a->'b->'b (legal) 'a->'a->'a (legal) 'b->'b->'b (legal) 'a->'b->'a (ILLEGAL) 我还需要定
'a->'a->'a-'b (legal)
'a->'b->'b (legal)
'a->'a->'a (legal)
'b->'b->'b (legal)
'a->'b->'a (ILLEGAL)
datatype 'a tree =
leaf
| br of 'a * 'a tree * 'a tree;
以及我如何定义一棵树来满足这些需求
任何帮助都将不胜感激
谢谢
好的,非常感谢。你的意思是这样的:
datatype 'b bTree =
leaf
| bBranch of 'b * 'b bTree * 'b bTree
;
datatype ('a,'b) abTree =
leaf
| aBranch of 'a * ('a, 'b) abTree * ('a,'b) abTree
| bBranch of 'b * 'b bTree * 'b bTree
;
这就是我为这个案例所做的,它是一个3型树,正如我前面提到的:
datatype 'c cTree =
leaf
| cBranch of 'c * 'c cTree * 'c cTree
;
datatype ('b, 'c) bcTree =
leaf
| bBranch of 'b * ('b, 'c) bcTree * ('b,'c) bcTree
| cBranch of 'c * 'c cTree * 'c cTree
;
datatype ('a, 'b, 'c) abcTree =
leaf
| aBranch of 'a * ('a, 'b, 'c) abcTree * ('a, 'b, 'c) abcTree
| bBranch of 'b * ('b, 'c) bcTree * ('b, 'c) bcTree
| cBranch of 'c * 'c cTree * 'c cTree
;
我说得对吗
另外,leafs的要求意味着什么?说树叶没有价值的那个
首先,我不知道如何定义二叉树,使其包含多个类型
以及我如何定义一棵树来满足这些需求
将twotypetree
定义为包含'a
值和两个('a,'b)twotypetree
s的abranch
,或包含'b树的bbranch
由于'b树
不能包含任何'a
s,因此b节点
不能有任何包含'a
s的子节点,因此满足了要求。我添加了有关“我自己的anwser”的更多信息。
datatype ('a, 'b) twotypetree = ...