gpt4 book ai didi

haskell - Haskell 中的 `randoms` 函数是如何工作的?

转载 作者:行者123 更新时间:2023-12-05 08:27:11 25 4
gpt4 key购买 nike

我正在关注 Learn You A Haskell学习 Haskell 的书,但我无法理解 randoms 函数。该书将函数定义为:

randoms' :: (RandomGen g, Random a) => g -> [a]  
randoms' gen = let (value, newGen) = random gen in value:randoms' newGen

现在我对这个函数的看法是,它递归地调用自身并将返回值附加到列表 value 中。我不明白的是这个函数是如何返回的,因为每次它只是用一个新的随机种子调用自己!

最佳答案

我认为令人困惑的部分可能是使用 :在返回值中。

value:randoms' newGen 

这是一个列表,第一项为value , 列表的其余部分是对 randoms' newGen 的递归调用返回的内容.

What I don't understand is how the function returns because every time it just calls itself with a new random seed!

由于惰性,它只会在您尝试访问返回列表的第二个(或后面的)项目时调用自己。这个列表不是,也不可能立即在内存中。 Haskell 中的列表更像是食谱……除非您尝试访问一个元素,否则 Haskell 不会尝试弄清楚它是什么。

关于haskell - Haskell 中的 `randoms` 函数是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44730301/

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