gpt4 book ai didi

haskell - corecursion 和 codata

转载 作者:行者123 更新时间:2023-12-02 02:51:20 25 4
gpt4 key购买 nike

想在 Haskell 中获得以下函数的分步说明

fibs = 0 : 1 : zipWith (+) fibs (tail fibs)

我知道“fibs”通常是“懒惰的”,因此下一项将“按需”计算,但是我不确定“tail”函数如何在无限列表上工作。

因此,说明它如何处理一些中间数据会有所帮助。

最佳答案

一开始的评价是这样的:

fibs = 0 : 1 : zipWith (+) fibs (tail fibs)

如果我们替换 fibs通过它的评估,它看起来像这样:
fibs = 0 : 1 : zipWith (+) (0 : 1 : ?) (1 : ?)

哪里 ?表示未评估的 thunk。让我们评估 fibs 的下一个元素:
fibs = 0 : 1 : zipWith (+) (0 : 1 : ?) (1 : ?) ==>
fibs = 0 : 1 : 1 : zipWith (+) (1 : ?) (?)
zipWith 的每个参数列表的第一个元素被消耗。现在,当我们评估它时,我们也知道下一个 thunk 的值是什么,我们可以填写它。这允许我们评估下一个单元格,依此类推:
fibs = 0 : 1 : 1 : zipWith (+) (1 : ?) (?) ==>
fibs = 0 : 1 : 1 : zipWith (+) (1 : 1 : ?) (1 : ?) ==>
fibs = 0 : 1 : 1 : 2 : zipWith (+) (1 : ?) (?) ==>
fibs = 0 : 1 : 1 : 2 : zipWith (+) (1 : 2 : ?) (2 : ?) ==>
fibs = 0 : 1 : 1 : 2 : 3 : zipWith (+) (2 : ?) (?) ==>
...

关于haskell - corecursion 和 codata,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6186664/

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