问题标签 [thunk]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
196 浏览

functional-programming - 什么时候打嗝比较好?

什么时候使用惰性评估而不是急切评估更好?当您知道表达式将只计算一次或永远不会计算时会更好吗?

0 投票
2 回答
121 浏览

haskell - 关于 haskell 的严格性

我创建了以下 Haskell 素数函数(在 ghci 中):

请不要介意第二个/记忆的参数(它应该总是从 2 开始)。当然,正如预期的那样,thunk 很快就会失控。确认 43 是第 14 个素数需要超过 19 秒...

我已经阅读了严格性(seq主要$!是),但我所有的尝试都花费了更长的时间!

0 投票
1 回答
522 浏览

haskell - 了解涉及 GHCi let 绑定时 thunk 的不同行为

我一直在玩 Simon Marlow 关于 Haskell 中并行和并发编程的书中的一些示例,并偶然发现了一个我不太了解的有趣行为。这真的是关于我试图了解 GHC 的一些内部工作原理。

假设我在 REPL 中执行以下操作:

好的,这几乎是我所期望的,只是 z 已经被评估为 WHNF。让我们编写一个类似的程序并将其放在一个文件中:

并在 GHCi 中摆弄它:

所以这有点不同:z没有提前评估为 WHNF。我的问题是:

为什么z在执行时会在 REPL 中评估为 WHNF,let z = (x,x)但在从文件加载定义时不会。我怀疑它与模式绑定有关,但我不知道在哪里查找以进行澄清(也许我完全错了)。我本来希望它以某种方式表现得像文件中的示例。

任何指示或简要解释为什么会发生这种情况?

0 投票
1 回答
130 浏览

javascript - Koa 和 Twitter - “Tunking” 不起作用

我已经通过 thunking 获得了一些第三方异步函数来与 Koa 一起使用,或者像这样包装函数:var thunkedFunction = function(params) { return function(callback) { originalFunction(params, callback) }; )或者使用节点 thunkify 库。

但是,当我像这样尝试使用 ntwitter 的流时:

我收到以下错误:“无法读取未定义的属性 stream_base”。

深入挖掘 ntwitter(基于 node-twitter 构建)我看到 Twitter.prototype.stream 函数调用 this.options.stream_base,并且 this.options 在我通常调用它时定义,tw.stream(function(stream) {...});但在我调用函数时未定义。是否有任何原因导致该函数在重击时失去其范围,有没有办法规避这个问题?

0 投票
1 回答
929 浏览

node.js - 带有 Thunkify + Mongoose 的 KoaJS

我正在研究我的第一个 koajs 项目,并且在了解(或尝试)生成器函数、yield、thunk 等之后。我遇到了 mongoose 的问题(我非常依赖它)。搜索论坛后,解决方案是thunkify:

咖啡脚本:

JavaScript:

这在我看来是有道理的......但我收到了这个错误:

……嗯。帮助?:)

0 投票
2 回答
238 浏览

clojure - Clojure thunks:堆栈溢出 [0] 但不是 '(0)?

这是一段代码,它给了我一个StackOverflowError(从我的代码库中的一个实际示例归结为):

(注意:此代码仅用于演示问题或返回零。

我可以通过以下任何步骤“拯救”它:

  1. 删除reduce线
  2. 更改[0]'(0)
  3. 在和(take 100000000)之间的任何点添加一个(或任何整数) 。mapcatcount

我基本上对这种行为感到困惑(尤其是#2)。我会很感激任何意见。

(我觉得这可能与Why does reduce give a StackOverflowError in Clojure?有关,但我不太清楚如何 - 所以如果它是相关的,我会很感激解释原因。)

0 投票
1 回答
120 浏览

node.js - 无法正确使用 thunkify npm 包

该函数有以下签名:

我想在 co generator 函数中调用它,所以我尝试用 thunkify 包装它,如下所示:

结果我的单元测试失败并且堆栈跟踪没有显示原因:

0 投票
2 回答
499 浏览

haskell - Haskell 斐波那契解释

我对 Haskell 还是很陌生,我正试图弄清楚斐波那契数列的惰性表达是如何工作的。

我知道以前有人问过这个问题,但没有一个答案能解决我在可视化结果时遇到的问题。

该代码是使用的规范代码zipWith

我理解以下内容:

  1. zipWith从字面上将两个列表压缩在一起
  2. tail抓取列表中除第一个元素之外的所有元素
  3. Haskell 将“未来”计算数据引用为thunks.

据我了解,它首先添加[0,1,<thunk>][1,<thunk>]使用zipWith (+)to give [1,<thunk>]。所以现在你有

我在谷歌上搜索的很多参考资料都开始将上面的行“可视化”为

我的问题是这样的:

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

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

0 投票
2 回答
883 浏览

scala - Scala 惰性 val 缓存

在以下示例中:

为什么当我这样称呼它时 hi 没有打印两次:

这个例子实际上来自《Scala 中的函数式编程》一书,给出的原因是为什么“hi”没有被打印两次,这对我来说不够有说服力。所以只想在这里问这个!

0 投票
1 回答
156 浏览

c++ - VC 是否符合关于警告 C4407 的标准?

以下源代码在 VC 中生成警告 C4407,编译器确实生成了不正确的代码。

产生的代码是不正确的,因为调用时指针没有pA调整pa,导致. 但是,代码在 GCC 和 clang 中编译良好,没有任何警告(严格别名除外)。指针在 GCC 和 clang 生成的代码中进行了适当的调整。所以,我想知道标准对此有何评论?上述代码中的演员表是否符合标准?还是 GCC 和 clang 的非标准扩展?thisfpA