相关疑难解决方法(0)

Haskell Fibonacci解释

我对Haskell很陌生,我试图围绕Fibonacci序列的懒惰表达如何工作.

我知道之前已经问过这个问题,但是没有一个答案解决了我在查看结果时遇到的问题.

代码是使用的规范 zipWith

fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
Run Code Online (Sandbox Code Playgroud)

我理解以下内容:

  1. zipWith 字面上将两个列表拉到一起
  2. tail 抓取除列表的第一个元素之外的所有元素
  3. Haskell将'to-be'计算数据引用为thunks.

从我的理解,它首先添加[0,1,<thunk>][1,<thunk>]使用zipWith (+)给予[1,<thunk>].所以现在你有

fibs = 0 : 1 : 1 : zipWith (+) fibs (tail fibs)
Run Code Online (Sandbox Code Playgroud)

我用谷歌搜索过的很多参考文献都开始将上面的线"可视化"为

fibs = 0 : 1 : 1 : zipWith (+) [1,1,<thunk>] ([1,<thunk>]).
Run Code Online (Sandbox Code Playgroud)

我的问题是:

为什么 fibs 上面一行中 组件只对应[1,1,<thunk>] 而不是 [0,1,1,<thunk>]

不应该fibs包含整个列表加<thunk>

haskell functional-programming fibonacci lazy-evaluation thunk

9
推荐指数
1
解决办法
362
查看次数

Haskell无限递归

以下函数计算斐波那契数列:

fib = 0 : 1 : (zipWith (+) fib (tail fib))
Run Code Online (Sandbox Code Playgroud)

如果运行它,我们将得到一个无限列表,但是递归如何工作?如果函数不断调用自身,为什么会在屏幕上打印数字?如果您能解释编译器如何管理调用,将不胜感激。

recursion haskell list fibonacci infinite

3
推荐指数
1
解决办法
752
查看次数

了解Haskell中的递归斐波那契函数

尽管可以使用此线程,但是由于答案的不同,我不允许在答案下问我的问题,因此我不得不为此创建一个新问题。(我只是stackoverflow中的新手:)

关于以下fib功能如何工作,我并不清楚

fibs :: [Integer]
fibs = 1 : 1 : zipWith (+) fibs (tail fibs)
Run Code Online (Sandbox Code Playgroud)

在这个stackoverflow线程中

nichijou逐步解释了我从nichijou引用的以下线程:

首先,我们使用fib和tail fib可以得到第3个:

fibs                        : [1, 1, ?
tail fibs                   : [1, ?
zipWith (+) fibs (tail fibs): [2, ?
Run Code Online (Sandbox Code Playgroud)

现在,我们知道第三个是2,我们可以得到第四个:

fibs                        : [1, 1, 2, ?
tail fibs                   : [1, 2, ?
zipWith (+) fibs (tail fibs): [2, 3, ?
Run Code Online (Sandbox Code Playgroud)

现在的第五名:

fibs                        : [1, 1, 2, 3, ?
tail fibs                   : [1, 2, 3, ?
zipWith (+) fibs (tail fibs): [2, …
Run Code Online (Sandbox Code Playgroud)

haskell fibonacci

1
推荐指数
1
解决办法
107
查看次数