คำถามติดแท็ก 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 - Lazy แนวปฏิบัติที่ดีที่สุดในการใช้งานวัตถุ Lazy ให้ได้ประสิทธิภาพสูงสุดคืออะไร ใครบางคนชี้ให้ฉันเห็นการใช้งานจริงในแอปพลิเคชันจริง กล่าวอีกนัยหนึ่งฉันควรใช้เมื่อใด
327 c#  .net  lazy-evaluation 

3
เครื่องหมายอัศเจรีย์หมายถึงอะไรในการประกาศของ Haskell
ฉันเจอคำจำกัดความต่อไปนี้เมื่อฉันพยายามเรียนรู้ Haskell โดยใช้โครงการจริงเพื่อผลักดันมัน ฉันไม่เข้าใจว่าเครื่องหมายอัศเจรีย์หน้าแต่ละอาร์กิวเมนต์หมายถึงอะไรและหนังสือของฉันไม่ได้พูดถึงมัน data MidiMessage = MidiMessage !Int !MidiMessage

7
วาลขี้เกียจทำอะไร?
ผมสังเกตเห็นว่า 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 เป็นเวกเตอร์
มีวิธีที่ชัดเจนมากขึ้นในการรับหนึ่งคอลัมน์ของ dplyr tbl เป็นเวกเตอร์จาก 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 (ซ่อนไว้) ราคาเท่าไหร่?
คุณลักษณะที่มีประโยชน์อย่างหนึ่งของ Scala คือlazy valการประเมิน a valล่าช้าจนกว่าจะมีความจำเป็น (ในการเข้าถึงครั้งแรก) แน่นอน a lazy valต้องมีค่าใช้จ่ายบางส่วน - สกาล่าบางแห่งต้องติดตามว่าได้รับการประเมินค่าแล้วและการประเมินผลต้องทำข้อมูลให้ตรงกันเนื่องจากหลายเธรดอาจพยายามเข้าถึงค่าเป็นครั้งแรกในเวลาเดียวกัน ค่าใช้จ่ายของ a lazy valคืออะไร - มีค่าสถานะบูลีนที่ซ่อนอยู่ซึ่งเชื่อมโยงกับ a lazy valเพื่อติดตามว่าได้รับการประเมินหรือไม่สิ่งที่ถูกซิงโครไนซ์และมีค่าใช้จ่ายเพิ่มเติมอีกหรือไม่ นอกจากนี้สมมติว่าฉันทำสิ่งนี้: class Something { lazy val (x, y) = { ... } } นี่คือเหมือนกับการมีสองแยกlazy vals xและyหรือฉันจะได้รับค่าใช้จ่ายเพียงครั้งเดียวสำหรับทั้งคู่(x, y)?

14
การบีบอัดสตรีมโดยใช้ JDK8 พร้อม lambda (java.util.stream.Streams.zip)
ใน JDK 8 ที่มีแลมบ์ดา b93 มีคลาสjava.util.stream.Streams.zip ใน b93ซึ่งสามารถใช้ในการสตรีม zip (นี่คือตัวอย่างในบทเรียนExploring Java8 Lambdas ตอนที่ 1 โดย Dhananjay Nene ) ฟังก์ชั่นนี้: สร้างสตรีมรวมที่ขี้เกียจและต่อเนื่องกันซึ่งองค์ประกอบเป็นผลลัพธ์ของการรวมองค์ประกอบของสองสตรีม อย่างไรก็ตามใน b98 นี้ได้หายไป Infact Streamsชั้นไม่ได้สามารถเข้าถึงได้ในjava.util.stream ใน B98 ฟังก์ชั่นนี้ได้ถูกย้ายไปแล้วหรือไม่และถ้าอย่างนั้นฉันจะซิปสตรีมอย่างกระชับโดยใช้ b98 ได้อย่างไร? แอปพลิเคชันที่ฉันมีอยู่ในการใช้งานจาวาของ Shenซึ่งฉันได้แทนที่ฟังก์ชั่น 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; …

9
การปิดคำศัพท์ทำงานอย่างไร
ขณะที่ฉันกำลังตรวจสอบปัญหาที่ฉันมีเกี่ยวกับการปิดคำศัพท์ในรหัส Javascript ฉันมาพร้อมปัญหานี้ใน 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 …

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 …

22
เหตุใดการประเมินแบบขี้เกียจจึงมีประโยชน์?
ฉันสงสัยมานานแล้วว่าทำไมการประเมินแบบขี้เกียจจึงมีประโยชน์ ฉันยังไม่เคยมีใครอธิบายให้ฉันเข้าใจได้ ส่วนใหญ่จะจบลงด้วยการ "เชื่อใจฉัน" หมายเหตุ: ฉันไม่ได้หมายถึงการท่องจำ

4
Fibonacci-function นี้จำได้อย่างไร?
fibonacci-function นี้บันทึกโดยกลไกใด? fib = (map fib' [0..] !!) where fib' 1 = 1 fib' 2 = 1 fib' n = fib (n-2) + fib (n-1) และในบันทึกที่เกี่ยวข้องเหตุใดเวอร์ชันนี้จึงไม่เป็นเช่นนั้น fib n = (map fib' [0..] !! n) where fib' 1 = 1 fib' 2 = 1 fib' n = fib (n-2) + fib …

5
วิธีการแปลงลำดับขี้เกียจเป็นไม่ขี้เกียจใน Clojure
ฉันลองทำสิ่งต่อไปนี้ใน Clojure โดยคาดหวังว่าจะมีการส่งคืนคลาสของลำดับที่ไม่ขี้เกียจ: (.getClass (doall (take 3 (repeatedly rand)))) อย่างไรก็ตามสิ่งนี้ยังคงกลับclojure.lang.LazySeqมา ฉันเดาว่าdoallจะประเมินลำดับทั้งหมด แต่ส่งคืนลำดับเดิมเนื่องจากยังมีประโยชน์สำหรับการบันทึก ดังนั้นวิธีการสร้างลำดับที่ไม่ขี้เกียจจากคนขี้เกียจคืออะไร?

1
Angular lazy การผูกครั้งเดียวสำหรับนิพจน์
AngularJS มีคุณสมบัติใหม่ตั้งแต่รุ่น 1.3.0-beta.10 ที่: "ขี้เกียจเพียงครั้งเดียวที่มีผลผูกพัน" นิพจน์ทั่วไปสามารถนำหน้าโดย::บอกให้เชิงมุมหยุดดูหลังจากที่นิพจน์ได้รับการประเมินครั้งแรก ตัวอย่างทั่วไปที่ให้ไว้มีดังนี้: &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;

8
ความเข้มงวดของ Haskell คืออะไร?
เราทุกคนรู้ (หรือควรรู้) ว่า Haskell ขี้เกียจไปโดยปริยาย ไม่มีสิ่งใดถูกประเมินจนกว่าจะต้องประเมิน ดังนั้นเมื่อต้องประเมินบางสิ่งบางอย่าง? มีจุดที่ต้องเข้มงวด Haskell ฉันเรียกสิ่งเหล่านี้ว่า "จุดเข้มงวด" แม้ว่าคำเฉพาะนี้จะไม่แพร่หลายอย่างที่คิด ตามฉัน: ลด (หรือการประเมินผล) ใน Haskell เพียงเกิดขึ้นในจุดที่เข้มงวด ดังนั้นคำถามคือสิ่งที่แม่นยำเป็น Haskell จุดเข้มงวด? สัญชาตญาณของฉันบอกว่าmain, seq/ รูปแบบปังจับคู่รูปแบบและใด ๆIOการดำเนินการดำเนินการผ่านทางmainเป็นประเด็นหลักเข้มงวด แต่ผมไม่ทราบจริงๆว่าทำไมฉันรู้ว่า (ถ้าไม่เรียกว่า "จุดเข้มงวด" จะเรียกว่าอะไร) ฉันคิดว่าคำตอบที่ดีจะรวมถึงการอภิปรายเกี่ยวกับ WHNF และอื่น ๆ ฉันยังคิดว่ามันอาจสัมผัสกับแคลคูลัสแลมบ์ดา แก้ไข: ความคิดเพิ่มเติมเกี่ยวกับคำถามนี้ ดังที่ฉันได้ไตร่ตรองเกี่ยวกับคำถามนี้แล้วฉันคิดว่าการเพิ่มคำจำกัดความของจุดเข้มงวดจะชัดเจนกว่า จุดเข้มงวดอาจมีบริบทที่แตกต่างกันและความลึกที่แตกต่างกัน(หรือความเข้มงวด) ย้อนกลับไปที่คำจำกัดความของฉันที่ว่า "การลดลงของ Haskell เกิดขึ้นที่จุดเข้มงวดเท่านั้น" ขอให้เราเพิ่มคำจำกัดความดังกล่าวในประโยคนี้: "จุดเข้มงวดจะเกิดขึ้นเมื่อมีการประเมินหรือลดบริบทโดยรอบเท่านั้น" ดังนั้นให้ฉันลองให้คุณเริ่มต้นด้วยคำตอบที่ฉันต้องการ mainเป็นจุดเข้มงวด ได้รับการกำหนดเป็นพิเศษให้เป็นจุดเข้มงวดหลักของบริบท: โปรแกรม เมื่อmainมีการประเมินบริบทของโปรแกรมจุดเข้มงวดของ main …

4
Haskell มีการเพิ่มประสิทธิภาพหางซ้ำหรือไม่?
วันนี้ฉันค้นพบคำสั่ง "time" ใน unix และคิดว่าจะใช้เพื่อตรวจสอบความแตกต่างของเวลาทำงานระหว่างฟังก์ชันการเรียกซ้ำแบบหางซ้ำและฟังก์ชันเรียกซ้ำแบบปกติใน Haskell ฉันเขียนฟังก์ชันต่อไปนี้: --tail recursive fac :: (Integral a) =&gt; a -&gt; a fac x = fac' x 1 where fac' 1 y = y fac' x y = fac' (x-1) (x*y) --normal recursive facSlow :: (Integral a) =&gt; a -&gt; a facSlow 1 = 1 …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.