gpt4 book ai didi

ocaml - 语言上的懒惰

转载 作者:行者123 更新时间:2023-12-04 16:29:49 25 4
gpt4 key购买 nike

我明白如果我有语句 c = a AND b,如果 a 是假的,那么编译器不会费心评估 b,它会知道结果,因为 a 已经是假的。

但是,如果我有一个递归函数并且将递归调用 AND 在一起呢?

So myfunc input1 input2 = and[myfunc(input1),myfunc(input2)]

如果从上述递归函数调用树中的任何一点返回的函数返回 false,递归函数调用是否会终止并且值 false 将仅在原始调用点进行评估?

换句话说,它会使用上面的惰性求值吗?

最佳答案

是的。事实上,and的一种实现是递归的(并且没有添加任何严格性):

and :: [Bool] -> Bool
and [] = True
and (x:xs) = x && and xs

为了证明这是有效的,您可以传递一个无限列表 False转至 and ,并看到它返回
Prelude> and (repeat False)
False

但是请注意,这不适用于 True 的无限列表。 s,因为它将永远寻找 False ,但永远找不到一个。

关于ocaml - 语言上的懒惰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8153350/

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