Syntax 在OCaml中,`and`关键字是什么意思?
我对OCaml中的Syntax 在OCaml中,`and`关键字是什么意思?,syntax,ocaml,Syntax,Ocaml,我对OCaml中的和关键字感到迷惑。透过看,我明白了 那么 这是怎么回事?和关键字是否只是复制最后一个类型、let或let rec语句?是否存在和rec语句?为什么我要使用和而不是只键入let或type,使我的代码不易重构?还有什么我应该知道的吗?和关键字用于避免多个let(第一个示例,我从不使用它,但为什么不使用它)或用于类型、函数、模块的相互递归定义 正如您在第二个示例中所看到的: let rec debug stack env (r, ty) = ... | Tunresolv
和关键字感到迷惑。透过看,我明白了
那么
这是怎么回事?和
关键字是否只是复制最后一个类型
、let
或let rec
语句?是否存在和rec
语句?为什么我要使用和而不是只键入let
或type
,使我的代码不易重构?还有什么我应该知道的吗?和
关键字用于避免多个let
(第一个示例,我从不使用它,但为什么不使用它)或用于类型、函数、模块的相互递归定义
正如您在第二个示例中所看到的:
let rec debug stack env (r, ty) =
...
| Tunresolved tyl -> o "intersect("; debugl stack env tyl; o ")"
...
and debugl stack env x =
...
| [x] -> debug stack env x
...
debug
调用debugl
,反之亦然。因此,和
允许这样做
[编辑]没有给出一个合适的例子让我很困扰,所以这里有一个你经常看到的例子:
let rec is_even x =
if x = 0 then true else is_odd (x - 1)
and is_odd x =
if x = 0 then false else is_even (x - 1)
(您可以找到此示例)
对于相互递归的类型,很难找到配置,但下面我们将定义树
和林
,如下所示
type 'a tree = Empty | Node of 'a * 'a forest
and 'a forest = Nil | Cons of 'a tree * 'a forest
例如,由空树、标记为“a”的单例树和标记为“b”和“c”的两节点树组成的林将表示为:
let f1 = Cons (Empty, (* Empty tree *)
Cons (Node ('a', (* Singleton tree *)
Nil), (* End of the first tree *)
Cons (Node ('b', (* Tree composed by 'b'... *)
Cons (Node ('c', (* and 'c' *)
Nil),
Nil)
),
Nil (* End ot the second tree *)
)
)
);;
大小函数(计算林中的节点数)为:
let rec size_tree = function
| Empty -> 0
| Node (_, f) -> 1 + size_forest f
and size_forest = function
| Nil -> 0
| Cons (t, f) -> size_tree t + size_forest f
我们得到了
# size_forest f1;;
- : int = 3
let rec size_tree = function
| Empty -> 0
| Node (_, f) -> 1 + size_forest f
and size_forest = function
| Nil -> 0
| Cons (t, f) -> size_tree t + size_forest f
# size_forest f1;;
- : int = 3