在OCAML中使用in关键字

Mis*_*tyD 4 ocaml

我很困惑关键字in在OCAML中的作用.我什么时候需要使用它?我接近理解的唯一例子是:

let quit_loop = ref false in
while not !quit_loop do
  print_string "Have you had enough yet? (y/n) ";
  let str = read_line () in
  if str.[0] = 'y' then
    quit_loop := true
done;;
Run Code Online (Sandbox Code Playgroud)

要么

let x = 10 in
let y = 20 in
x + y ;;
Run Code Online (Sandbox Code Playgroud)

在这里指示什么?

Jef*_*eld 7

查看它的最佳方式in是不是一个单独的关键字.相反,有一个看起来像的表达式let v = expr1 in expr2.这是OCaml定义"本地"变量的方式.它的含义是你将v用作命名值expr2,当它出现时它expr2的值是值expr1.

我怀疑这个令人困惑的唯一原因是OCaml中有一个不同的构造来定义"全局"变量.您可以说在模块的顶层let v = expr.这定义了(通常)从模块导出的全局名称.

你给出的所有例子都是第一种; 也就是说,他们正在定义一个名为局部变量quit_loop,str,x,和y.

作为语法问题,in主要表现为标点符号; 它允许语言的解析器告诉expr1停止和expr2开始的位置.这在ML语言中尤其必要,其中将两个表达式彼此相邻放置具有特定(并且非常常用)的含义.

  • 谢谢。我今天开始学习 OCaml,这是我的第一个函数式语言。我想每个用谷歌搜索这个问题的人可能也是新手。我很欣赏这个编辑。 (2认同)