问题标签 [lazy-evaluation]

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 投票
5 回答
4129 浏览

haskell - 解释这段输出素数流的haskell代码

我很难理解这段代码:

有人可以为我分解吗?我知道其中有递归,但这就是我无法理解此示例中的递归如何工作的问题。

0 投票
3 回答
2285 浏览

jquery - 用于延迟加载/延迟评估的 JQuery 插件?

有这样的jQuery插件吗?

更具体地说:我想使用一些优雅而简单的方法来推迟一些代码执行,直到它真正需要(一些事件发生)。当这个事件发生时,被推迟的代码应该只执行一次。某种惰性初始化。

例如,不是在文档准备好时而是在用户将鼠标悬停在该元素上时对元素应用一些动画。

我知道如何以手动方式执行此操作,但我不喜欢它,因为我必须考虑在执行匿名函数之前检查和设置“初始化”标志。我想知道它是否已经完成(没有错误,具有一些美味的功能)。

0 投票
2 回答
329 浏览

javascript - 你能在 QtScript 中实现惰性数组访问吗?

是否可以实现一个 QObject 以在 QtScript 中使用,它重载 [] 以实现惰性数组填充?

我想实现这样的事情:

并在 C++ 代码中延迟计算该值。这可能吗?

0 投票
2 回答
887 浏览

scala - 如何编写“orElse”的惰性可变参数版本

是否可以编写一个带有可变数量参数的通用orElse方法?Option也就是说,而不是:

你可以使用:

0 投票
3 回答
466 浏览

sorting - 短路排序

我明白那个:

实际上只会评估 2**1,其余的都不会,但我正在阅读的书说:

只需要在列表中找到最小的项目,因为这就是全部使用的。这是如何运作的?据我所知,这对于我知道的排序算法(如冒泡排序)是不可能的。

我认为这可行的唯一方法是,如果排序算法要遍历整个列表以寻找最小的项目,然后在没有该项目的情况下在列表上递归。对我来说,这听起来很慢。

这是排序功能的工作原理,还是有另一种我不知道的排序算法可以允许短路?

0 投票
5 回答
531 浏览

c++ - 在全局单例对象中存储 COM 指针的问题

背景

我正在使用的应用程序有几个 COM DLL。

其中一个 COM DLL 有一个全局单例对象,它存储指向其他 DLL 中 COM 接口的指针。因为它是一个全局单例对象,所以我使用了惰性初始化习惯用法,因为我试图获取指针的接口可能存在于尚未加载的 DLL 中。

旁注:这在注册单个 DLL 时尤其重要,因为全局对象将在regsvr32进程中构建,我不希望 DLL 在此过程中尝试获取到另一个 DLL 的接口。)

例如,我的惰性初始化方法会做这样的事情:

注意: m_pMyOtherObjectCComPtr类型的成员变量。

延迟初始化可能与我的问题无关,但为了完整起见,我将其包括在内。

问题

我注意到的是,在某些情况下,当我的应用程序关闭时,我会收到失败的断言。但是,如果我将代码更改为QueryInterface() 每次需要访问时调用IID_IMyOtherOBject(而不是将其存储为成员变量),这会阻止断言。

在我看来,这似乎是一个 COM 对象生命周期问题。我的假设是,因为我是storing一个 COM 指针,所以在我指向的 COM 接口的破坏和我自己指向它的指针之间需要某种同步。

我对这个CComPtr类(我正在使用)的理解是,它消除了处理生命周期问题(即调用AddRef()and Release())的很多麻烦。但它似乎不适用于我的情况。

谁能选择我可能做错了什么?

0 投票
2 回答
10377 浏览

list - 如何在 Haskell 中创建无限重复列表?

我是一名 C# 人,试图通过 Erik Meijer 的 Channel 9 网络广播自学 Haskell。我遇到了一个有趣的难题,它涉及使用 zip 和 mod 跳过列表中的每个“n”个元素。

我一直在想,如果我们可以避免使用 mod,它可能会更有效(对于非常大的列表或流)。

我想过懒惰地创建一个重复的整数列表,这样我们就可以简单地将 i 的值与 n 进行比较。

这样调用就会无限repeatInts 3返回。[1,2,3,1,2,3,1,2,3,1,2,3,..]

鉴于此,我们可以every像这样重新定义:

所以我的问题是:你将如何实施repeatInts

0 投票
4 回答
184 浏览

javascript - 是否可以在访问时创建或交换 Javascript 属性

我想在javascript中有某种惰性初始化对象属性,因此希望以某种方式重载属性读写访问,即:

其中 myobj 是我提供给脚本的一些对象。

理由:我想在应用程序中使用 Javascript (Rhino) 作为脚本引擎,并且脚本需要访问的数据结构可能非常庞大和复杂。所以我不想提前将它们全部包装到 javascript 对象中,尤其是。因为此应用程序中的普通脚本只需要其中的一小部分。另一方面,我希望脚本尽可能简单易读,因此我不想在脚本中明确要求使用带有字符串参数的 get 或 set 方法。

0 投票
2 回答
348 浏览

f# - F#:懒惰评估的奇怪之处

给定以下代码:

在交互式窗口中(每次都重置),

当我打电话时,let res = foo.Force ()我得到:

当我打电话时foo.Force() ,我得到:

在这两种情况下,我都希望它只打印“foo”,但是第二种情况会打印“foo\nbar”。这里发生了什么?

0 投票
5 回答
2529 浏览

performance - 推理 Haskell 的性能

以下两个用于计算斐波那契数列第 n 项的 Haskell 程序具有截然不同的性能特征:

它们在数学上非常接近相同,但fib2使用列表符号来记忆其中间结果,同时fib1具有显式递归。尽管有可能将中间结果缓存在 中fib1,但即使对于 而言,执行时间也是一个问题fib1 25,这表明递归步骤总是被评估的。引用透明度对 Haskell 的性能有什么贡献吗?我怎么能提前知道它会或不会呢?

这只是我担心的那种事情的一个例子。我想听听关于克服推理延迟执行的函数式编程语言的性能所固有的困难的任何想法。


总结: 我接受 3lectrologos 的回答,因为在 Haskell 中,您不必过多考虑语言的性能,如编译器的优化,这一点似乎非常重要——比我熟悉的任何其他语言都重要和。我倾向于说编译器的重要性是将惰性、函数式语言的性能推理与任何其他类型的性能推理区分开来的因素。


附录:遇到这个问题的任何人都可能想看看Johan Tibell关于高性能 Haskell幻灯片