“和”关键字在OCaml中是什么意思?

杰夫·汉普希尔

我对andOCaml中关键字感到困惑查看这段代码,我看到了

type env = {
    (* fields for a local environment described here *)
}

and genv {
    (* fields for a global environment here *)
}

后来

let rec debug stack env (r, ty) = (* a function definition *)

and debugl stack env x = (* another function definition *)

这里发生了什么?是否and关键字只是复制过去的typeletlet rec声明?有这样的and rec说法吗?为什么我要使用and而不是仅仅输入letor type,而使我的代码不那么容易重构?还有什么我应该知道的吗?

鲁克

and关键字用于避免多个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,反之亦然。因此,and允许这样做。

[编辑]我不愿意给出一个正确的例子,所以这是一个您经常会看到的例子:

 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)

(您可以在此处找到此示例

对于相互递归的类型,很难找到配置,但是在此Wikipedia页面之后,我们将定义treesforests如下

 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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

“文档”关键字和“ .something”是什么意思?

来自分类Dev

Swift中的“ required”关键字是什么意思?

来自分类Dev

ALSO关键字在MLISP中是什么意思?

来自分类Dev

D中的“ in”和“ out”关键字是什么意思?

来自分类Dev

D中的“ in”和“ out”关键字是什么意思?

来自分类Dev

sink和source关键字在Pulseaudio中是什么意思?

来自分类Dev

“最终”关键字是什么意思?

来自分类Dev

关键字strictfp是什么意思?

来自分类Dev

Laravel路由中的“ as”关键字是什么意思?

来自分类Dev

Future,async,await 关键字是什么意思?

来自分类Dev

我的/ etc / network / interfaces中的关键字是什么意思?

来自分类Dev

“ this”关键字在初始化程序块中是什么意思?

来自分类Dev

模块关键字在打字稿中是什么意思?

来自分类Dev

CakePHP 3.x中的“ use”关键字是什么意思?

来自分类Dev

我的/ etc / network / interfaces中的关键字是什么意思?

来自分类Dev

CUPS printers.conf中的“类型”关键字是什么意思?

来自分类Dev

熊猫查询方法中关键字“ columns”是什么意思?

来自分类Dev

类标题中的关键字“ constructor”是什么意思?

来自分类Dev

在交换机中使用时,关键字类型是什么意思?

来自分类Dev

Xcode控制台中的“ Some”关键字是什么意思?

来自分类Dev

关于laravel路由,“ uses”关键字是什么意思?

来自分类Dev

C ++类访问关键字“信号”是什么意思?

来自分类Dev

VB6关键字Set是什么意思?

来自分类Dev

类标题中的关键字“ constructor”是什么意思?

来自分类Dev

(* s在OCaml中是什么意思?

来自分类Dev

OCaml synax中的“ $”是什么意思?

来自分类Dev

Oracle中的“ THE”关键字是什么?

来自分类Dev

OCaml中的“ as”关键字

来自分类Dev

什么是“打开!” 在OCaml中是什么意思?

Related 相关文章

  1. 1

    “文档”关键字和“ .something”是什么意思?

  2. 2

    Swift中的“ required”关键字是什么意思?

  3. 3

    ALSO关键字在MLISP中是什么意思?

  4. 4

    D中的“ in”和“ out”关键字是什么意思?

  5. 5

    D中的“ in”和“ out”关键字是什么意思?

  6. 6

    sink和source关键字在Pulseaudio中是什么意思?

  7. 7

    “最终”关键字是什么意思?

  8. 8

    关键字strictfp是什么意思?

  9. 9

    Laravel路由中的“ as”关键字是什么意思?

  10. 10

    Future,async,await 关键字是什么意思?

  11. 11

    我的/ etc / network / interfaces中的关键字是什么意思?

  12. 12

    “ this”关键字在初始化程序块中是什么意思?

  13. 13

    模块关键字在打字稿中是什么意思?

  14. 14

    CakePHP 3.x中的“ use”关键字是什么意思?

  15. 15

    我的/ etc / network / interfaces中的关键字是什么意思?

  16. 16

    CUPS printers.conf中的“类型”关键字是什么意思?

  17. 17

    熊猫查询方法中关键字“ columns”是什么意思?

  18. 18

    类标题中的关键字“ constructor”是什么意思?

  19. 19

    在交换机中使用时,关键字类型是什么意思?

  20. 20

    Xcode控制台中的“ Some”关键字是什么意思?

  21. 21

    关于laravel路由,“ uses”关键字是什么意思?

  22. 22

    C ++类访问关键字“信号”是什么意思?

  23. 23

    VB6关键字Set是什么意思?

  24. 24

    类标题中的关键字“ constructor”是什么意思?

  25. 25

    (* s在OCaml中是什么意思?

  26. 26

    OCaml synax中的“ $”是什么意思?

  27. 27

    Oracle中的“ THE”关键字是什么?

  28. 28

    OCaml中的“ as”关键字

  29. 29

    什么是“打开!” 在OCaml中是什么意思?

热门标签

归档