Questions tagged «lazy-evaluation»

懒惰评估是指各种概念,这些概念试图避免对表达式的评估(除非需要其值),并在对其所有使用中共享对表达式的评估结果,从而无需对表达式进行一次以上的评估。

28
在node.js中一次读取一行文件?
我正在尝试一次读取一行大文件。我在Quora上发现了一个与该主题有关的问题,但我缺少一些联系以使整个组件组合在一起。 var Lazy=require("lazy"); new Lazy(process.stdin) .lines .forEach( function(line) { console.log(line.toString()); } ); process.stdin.resume(); 我想弄清楚的一点是,如何一次从文件而不是如本示例中的STDIN读取一行。 我试过了: fs.open('./VeryBigFile.csv', 'r', '0666', Process); function Process(err, fd) { if (err) throw err; // DO lazy read } 但它不起作用。我知道,在紧急情况下,我可能会回过头来使用PHP之类的东西,但是我想弄清楚这一点。 我不认为其他答案会起作用,因为该文件比我在其上运行的具有内存的服务器大得多。

7
什么时候应该使用Lazy <T>?
我发现这篇文章是关于 Lazy:C#4.0中的惰性-惰性 使用惰性对象具有最佳性能的最佳实践是什么?有人可以指出我在实际应用中的实际用途吗?换句话说,什么时候应该使用它?
327 c#  .net  lazy-evaluation 


7
懒惰的val做什么?
我注意到Scala提供了lazy vals。但是我不明白他们的所作所为。 scala&gt; val x = 15 x: Int = 15 scala&gt; lazy val y = 13 y: Int = &lt;lazy&gt; scala&gt; x res0: Int = 15 scala&gt; y res1: Int = 13 该REPL表明,y是lazy val的,但它是如何从一个正常的不同val?

7
提取dplyr tbl列作为向量
是否有更简洁的方法从带有数据库后端的tbl中获取dplyr tbl的一列作为向量(即,数据帧/表不能直接成为子集)? require(dplyr) db &lt;- src_sqlite(tempfile(), create = TRUE) iris2 &lt;- copy_to(db, iris) iris2$Species # NULL 那太容易了,所以 collect(select(iris2, Species))[, 1] # [1] "setosa" "setosa" "setosa" "setosa" etc. 但是似乎有点笨拙。

6
Scala的懒惰val的(隐藏)成本是多少?
Scala的一个方便功能是lazy val,其中a的求值val被延迟到必要时(首次访问时)。 当然,lazy val必须有一些开销-Scala必须跟踪某个值是否已经被评估并且评估必须同步,因为多个线程可能会尝试同时首次访问该值。 -的确切成本是多少lazy val-是否存在与a相关联的隐藏布尔标志lazy val以跟踪是否已被评估,确切地同步了什么,还有更多成本吗? 另外,假设我这样做: class Something { lazy val (x, y) = { ... } } 这是就等于拥有两个独立的lazy val小号x和y还是我得到的开销只有一次,一对(x, y)?

14
使用带有Lambda的JDK8压缩流(java.util.stream.Streams.zip)
在带有lambda b93的JDK 8中,b93中有一个类java.util.stream.Streams.zip可用于对流进行zip处理(这在Dhananjay Nene的Exploring Java8 Lambdas。Part 1教程中进行了说明)。该功能: 创建一个懒惰且顺序的组合Stream,其元素是将两个流的元素组合在一起的结果。 然而,在b98中,这种现象消失了。实际上,在b98的java.util.stream中Streams甚至无法访问该类。 此功能是否已被移走,如果是的话,如何使用b98简洁地压缩流? 我想到的应用程序是此Shen的java实现中的,我在其中替换了zip功能。 static &lt;T&gt; boolean every(Collection&lt;T&gt; c1, Collection&lt;T&gt; c2, BiPredicate&lt;T, T&gt; pred) static &lt;T&gt; T find(Collection&lt;T&gt; c1, Collection&lt;T&gt; c2, BiPredicate&lt;T, T&gt; pred) 具有相当冗长的代码的功能(不使用b98的功能)。

9
词汇闭包如何工作?
当我研究Java代码中的词法闭包问题时,我遇到了Python中的这个问题: flist = [] for i in xrange(3): def func(x): return x * i flist.append(func) for f in flist: print f(2) 请注意,此示例应避免使用lambda。它打印“ 4 4 4”,这是令人惊讶的。我希望“ 0 2 4”。 等效的Perl代码可以正确执行此操作: my @flist = (); foreach my $i (0 .. 2) { push(@flist, sub {$i * $_[0]}); } foreach my $f (@flist) …

4
带有无限列表的foldl与foldr行为
此问题中 myAny函数的代码使用文件夹。当满足谓词时,它将停止处理无限列表。 我用foldl重写了它: myAny :: (a -&gt; Bool) -&gt; [a] -&gt; Bool myAny p list = foldl step False list where step acc item = p item || acc (请注意,step函数的参数正确颠倒了。) 但是,它不再停止处理无限列表。 我试图按照Apocalisp的回答来跟踪函数的执行: myAny even [1..] foldl step False [1..] step (foldl step False [2..]) 1 even 1 || (foldl step …



5
如何在Clojure中将延迟序列转换为非延迟
我在Clojure中尝试了以下操作,期望返回非延迟序列的类: (.getClass (doall (take 3 (repeatedly rand)))) 但是,这仍然返回clojure.lang.LazySeq。我的猜测是,doall它会评估整个序列,但会返回原始序列,因为它对于记忆仍然有用。 那么,从懒惰序列创建非懒惰序列的惯用方法是什么?

1
角度懒惰一次性绑定表达式
自1.3.0-beta.10版本以来,AngularJS具有一项新功能:“懒惰的一次性绑定”。 可以在简单表达式前面加上::,告诉angular在首次评估表达式后停止观看。给出的常见示例如下所示: &lt;div&gt;{{::user.name}}&lt;/div&gt; 类似以下表达式的语法是否类似? &lt;div ng-if="user.isSomething &amp;&amp; user.isSomethingElse"&gt;&lt;/div&gt; &lt;div ng-class="{classNameFoo: user.isSomething}"&gt;&lt;/div&gt;

7
Haskell的严格点是什么?
我们都知道(或应该知道)Haskell默认是懒惰的。在必须评估之前,不会评估任何内容。那么什么时候必须对某些东西进行评估?在某些方面,Haskell必须严格。我称这些为“严格点”,尽管这个特定术语没有我想象的那么广泛。据我说: Haskell中的减少(或评估) 仅在严格点进行。 所以,问题是:什么,准确地说,是Haskell的严格点?我的直觉说main,seq/爆炸模式,模式匹配以及IO通过执行的任何操作main都是主要的严格要求,但是我真的不知道为什么知道这一点。 (另外,如果他们不叫“严点”,什么是他们叫什么名字?) 我想一个很好的答案将包括有关WHNF的一些讨论。我也想像它可能会影响lambda演算。 编辑:关于此问题的其他想法。 正如我对这个问题的思考一样,我认为在严格性点的定义中添加一些内容会更加清晰。严格点可以具有变化的上下文和变化的深度(或严格性)。回到我的定义“ Haskell的减少仅在严格性点发生”,让我们在该定义中添加以下条款:“严格性点仅在评估或减少其周围上下文时触发。” 因此,让我尝试让您开始我想要的答案。main是严格的一点。它被专门指定为上下文的主要严格要点:程序。在main评估程序(的上下文)时,将激活main的严格点。Main的深度最大:必须对其进行充分评估。Main通常由IO操作组成,这些操作也是严格意义上的要点,其上下文是main。 现在您尝试:seq用这些术语讨论和模式匹配。解释功能应用的细微差别:它有多严格?怎么不行 那deepseq呢 let和case陈述?unsafePerformIO?Debug.Trace?顶级定义?严格的数据类型?爆炸图案?等等,仅用seq或模式匹配就可以描述其中的多少项?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.