1

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

它是leafnode。对于节点,它需要'a键和'b值。

我这样做了:

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

但它不起作用

我该怎么做?

4

3 回答 3

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
于 2013-03-11T12:25:01.507 回答
4

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

type ('a, 'b) bst = 
  | Node of 'a * 'b * ('a, 'b) bst * ('a, 'b) bst
  | Leaf;;
于 2013-03-11T12:25:27.880 回答
0

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

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

这个问题在 F# 中有所不同,因为有多种方法可以将比较运算符附加到类型。

于 2013-03-27T17:29:14.773 回答