我对Haskell很陌生,我试图围绕Fibonacci序列的懒惰表达如何工作.
我知道之前已经问过这个问题,但是没有一个答案解决了我在查看结果时遇到的问题.
代码是使用的规范 zipWith
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
Run Code Online (Sandbox Code Playgroud)
我理解以下内容:
zipWith 字面上将两个列表拉到一起tail 抓取除列表的第一个元素之外的所有元素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
我有一个数组。例如,
x = [1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)
我知道命令
x.delete_at(i)
Run Code Online (Sandbox Code Playgroud)
将从数组中删除索引i处的元素。但从我所读到的,它只能处理一个论点。
假设我有一个变量来存储我希望从x 中删除的索引。例如,
y = [0,2,3]
Run Code Online (Sandbox Code Playgroud)
我的问题:是否可以使用存储在要删除的索引中的另一个数组从数组中删除多个元素?
本质上,类似
x.delete_at(y)
Run Code Online (Sandbox Code Playgroud)
谢谢!:)