Functional programming 如何为树创建联合类型,其中需要';一种键和';b OCaml中的值类型?

Functional programming 如何为树创建联合类型,其中需要';一种键和';b OCaml中的值类型?,functional-programming,ocaml,Functional Programming,Ocaml,我希望创建一个bst(二进制搜索树)联合类型 它是叶或节点。对于节点,它接受'a键和'b值 我这样做: 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,

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

它是
节点
。对于节点,它接受
'a
键和
'b

我这样做:

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;;                                     
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;;                                     
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;;

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

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

此外,您可能会遇到麻烦,因为
'a
需要一个比较运算符。这就是为什么在标准库中,
Map
Set
模块作为functor实现的原因,因此可以指定比较顺序

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


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

此外,您可能会遇到麻烦,因为
'a
需要比较运算符。这就是为什么在标准库中,
Map
Set
模块作为functor实现的原因,因此可以指定比较顺序

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

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