gpt4 book ai didi

ocaml - OCaml 中记录的变体

转载 作者:行者123 更新时间:2023-12-01 10:37:02 25 4
gpt4 key购买 nike

我想在 OCaml 中声明一个变体类型

type 'a tree = Node of 'a tree * 'a * 'a tree * int | Null

但是这里有很多属性,所以我想给它们贴上标签,所以我在这里尝试使用一条记录:

type 'a tree = Node of { left: 'a tree; value: 'a; right:'a tree; height: int | Null

但这会引发语法错误。

使用像 record 这样的东西可以让我使用漂亮的语法

match x with
| Node of a -> a.value
| Null -> 0

我应该如何声明它才不会出现语法错误?

最佳答案

您可以声明两种相互递归的类型,一种用于节点,一种用于树:

# type 'a node = { left: 'a tree; value: 'a; right:'a tree; height: int } 
and 'a tree = Node of 'a node | Null
;;
type 'a node = { left : 'a tree; value : 'a; right : 'a tree; height : int; } and 'a tree = Node of 'a node | Null;;

# match Node({left = Null; value = 1; right = Null; height = 0}) with
| Node(n) -> n.value
| Null -> 0
;;
- : int = 1

关于ocaml - OCaml 中记录的变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33524973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com