gpt4 book ai didi

haskell - 为什么这个功能没有触底

转载 作者:行者123 更新时间:2023-12-03 17:43:43 25 4
gpt4 key购买 nike

xs = [1, 2] ++ undefined
length $ take 2 $ take 4 xs
我的大脑将其视为 length (take 2 ( take 4 xs ) )如果括号中的所有内容都首先被评估,那么为什么这不会出现异常:prelude.undefined?
这本书给出的答案是 take 2 只取前两个索引,但 take 4 不应该在这里优先并首先得到评估吗?

最佳答案

If everything in the parenthesis is evaluated first, then why does this not error out with Exception: prelude.undefined?


因为 Haskell 是 懒惰 .这意味着除非必要,否则它不会评估任何内容。
确实, length将需要访问列表(但如果其中包含计算,则不需要访问其元素)。因此它将询问 take 2 ( take 4 xs ) )对于第一个元素,然后是第二个,然后是第三个,依此类推。
现在 take也很懒惰。这意味着只要它不需要被评估,它就不会做任何事情。万一 length询问下一个元素,它将确定该元素,如果稍后询问另一个元素,它将为列表提供第二个元素。如果 length要求另一个,然后 take 2将停止,从而返回空列表。
因此,Haskell 没有像 Python 或 Java 这样的评估策略,其中最内部的函数首先被评估并从左到右。

关于haskell - 为什么这个功能没有触底,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67288747/

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