gpt4 book ai didi

functional-programming - OCaml while true do 循环

转载 作者:行者123 更新时间:2023-12-02 07:00:50 24 4
gpt4 key购买 nike

我有以下代码:

let a = 1 in
while a<10 do
let a = a+1 in
done
Printf.printf "the number is now %d\n" a

解释器提示第 4 行,该行已done,我不知道这里出了什么问题。
我知道 OCaml 是一种函数式语言,变量是不可变的。我不应该在这里尝试更改 a 的值。但是,在 OCaml 中仍然有一个 while true do .. done 循环。我希望您了解我在这里要做什么。我该如何修改代码以使用 while true do .. done 完成这项工作?
我对函数式编程很陌生。请教我正确的入门方法。我发现自己陷入了命令式思维的僵局。

最佳答案

let ... in 构造期望后面有另一个表达式。例如,您可以使用 () 值(基本上表示“无”)

所以代码

let a = 1 in
while a<10 do
let a = a+1 in
()
done
Printf.printf "the number is now %d\n" a

它会编译。但它会无限循环,因为开始时定义为 1 的 a 与声明为 a+1 的 a 不同。两者在不同的范围内都是不同的常量值,并且在 while 的主体内声明仅限于主体的出现。

您可以通过使用 ref 函数及其处理程序将 a 指定为可变来获得您想要的:

let a = ref 1 in
while !a < 10 do
a := !a + 1
done
Printf.printf "the number is now %d\n" !a

请注意,使用 while 循环和可变值会失去 FP 的所有优势。

要以函数式方式执行此操作,您可以使用递归函数:

let rec f a =
if a < 10
then f (a+1)
else a
in
let a = f 1 in
Printf.printf "the number is now %d\n" a

这是完成这项工作的真正正确方式。如果你想做 FP,请不惜一切代价避免使用 while 循环。

关于functional-programming - OCaml while true do 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21205776/

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