如何为树创建一个联合类型,它在OCaml中需要一种键和一种类型的值?

时间:2013-03-11 12:03:05

标签: functional-programming ocaml

我希望创建一个bst(二叉搜索树)联合类型。

可以是leafnode。对于节点,它需要'a密钥和'b值。

我这样做了:

type 'a*'b bst = 
  | Node of 'a * 'b * ('a*'b) bst * ('a*'b) bst
  | Leaf;;

但它不起作用

我该怎么做?

3 个答案:

答案 0 :(得分:4)

您正在寻找的语法是:

# type ('a, 'b) bst =                              
      | Node of 'a * 'b * ('a,'b) bst * ('a,'b) bst
      | Leaf;;                                     
type ('a, 'b) bst = Node of 'a * 'b * ('a, 'b) bst * ('a, 'b) bst | Leaf

答案 1 :(得分:4)

多参数多态类型的语法如下:

type ('a, 'b) bst = 
  | Node of 'a * 'b * ('a, 'b) bst * ('a, 'b) bst
  | Leaf;;

答案 2 :(得分:0)

此外,您可能会遇到麻烦,因为'a需要比较运算符。这就是为什么在标准库中,MapSet模块被实现为仿函数,因此可以指定比较顺序。

如果您决定采用'a多态方式,则必须使用“神奇”默认比较运算符compare

F#中的问题不同,因为有一些方法可以将比较运算符附加到类型。