Sml 如何在ML编程语言中定义具有多种类型的树

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,'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)
    
  • 我还需要定义另一棵树,就像上面描述的一样,但现在我也得到了‘c’,在第二个要求中,它说对于每个路径,I’a值出现在‘b值’之前,所有的‘b值出现在’c值之前

    首先,我不知道如何定义二叉树,使其包含多个类型。 我的意思是最简单的二叉树是:

    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 = ...