gpt4 book ai didi

ocaml - 在 OCAML 中使用 in 关键字

转载 作者:行者123 更新时间:2023-12-04 23:42:50 25 4
gpt4 key购买 nike

我很困惑关键字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;;

或者
let x = 10 in
let y = 20 in
x + y ;;

in 在这里表示什么?

最佳答案

最好的查看方式是in不是单独的关键字。相反,有一个看起来像 let v = expr1 in expr2 的表达式。 .这是 OCaml 中定义“局部”变量的方式。它的意思是你将使用 v作为 expr2 中的命名值, 以及它出现在 expr2 中时的值是 expr1 的值.
我怀疑这完全令人困惑的唯一原因是 OCaml 中有一个不同的构造来定义“全局”变量。在模块的顶层你可以说let v = expr .这定义了一个(通常)从模块导出的全局名称。
你给出的所有例子都是第一类;也就是说,他们定义了名为 quit_loop 的局部变量。 , str , x , 和 y .
作为语法问题,in主要表现为标点符号;它允许语言的解析器告诉 expr1停止和 expr2开始。这在 ML 语言中尤其必要,因为将两个表达式彼此相邻放置具有特定(并且非常常用)的含义。
更新
根据要求,以下是 let ... in 的一些示例:

let compare_lengths a b =
(* Here "let ... in" is used to name values used throughout
* the computation (i.e., to make local variables).
*)
let alen = List.length a in
let blen = List.length b in
if alen < blen then -1
else if alen > blen then 1
else 0


let rec split list =
(* Here "let ... in" is used to name
* the parts of an intermediate result.
*)
match list with
| [] -> ([], [])
| (a, b) :: rest ->
let (ra, rb) = split rest in
(a :: ra, b :: rb)


let euclidean_distance (x1, y1) (x2, y2) =
(* Here "let ... in" defines a nested helper function.
*)
let sqr f = f *. f in
sqrt (sqr (x2 -. x1) +. sqr (y2 -. y1))

关于ocaml - 在 OCAML 中使用 in 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32672704/

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