我希望创建一个bst
(二叉搜索树)联合类型。
可以是leaf
或node
。对于节点,它需要'a
密钥和'b
值。
我这样做了:
type 'a*'b bst =
| Node of 'a * 'b * ('a*'b) bst * ('a*'b) bst
| Leaf;;
但它不起作用
我该怎么做?
答案 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
需要比较运算符。这就是为什么在标准库中,Map
和Set
模块被实现为仿函数,因此可以指定比较顺序。
如果您决定采用'a
多态方式,则必须使用“神奇”默认比较运算符compare
。
F#中的问题不同,因为有一些方法可以将比较运算符附加到类型。