คำถามติดแท็ก lazy-evaluation

การประเมินผลแบบขี้เกียจหมายถึงแนวคิดต่างๆที่พยายามหลีกเลี่ยงการประเมินนิพจน์เว้นแต่ว่าจำเป็นต้องใช้คุณค่าและเพื่อแบ่งปันผลการประเมินนิพจน์ระหว่างการใช้นิพจน์ทั้งหมดเพื่อไม่ให้มีการประเมินนิพจน์มากกว่าหนึ่งครั้ง

5
อะไรที่แย่เกี่ยวกับ Lazy I / O?
ฉันได้ยินมาโดยทั่วไปว่ารหัสการผลิตควรหลีกเลี่ยงการใช้ Lazy I / O คำถามของฉันคือทำไม? เป็นเรื่องปกติหรือไม่ที่จะใช้ Lazy I / O นอกเหนือจากการเล่นเฉยๆ? และอะไรทำให้ทางเลือกอื่น (เช่นตัวนับ) ดีกว่า?

3
Parallel Infinite Java Streams หน่วยความจำไม่เพียงพอ
ฉันพยายามที่จะเข้าใจว่าทำไมโปรแกรม Java ต่อไปนี้ถึงให้OutOfMemoryErrorในขณะที่โปรแกรมที่สอดคล้องกันโดย.parallel()ไม่ได้ System.out.println(Stream .iterate(1, i -> i+1) .parallel() .flatMap(n -> Stream.iterate(n, i -> i+n)) .mapToInt(Integer::intValue) .limit(100_000_000) .sum() ); ฉันมีสองคำถาม: ผลลัพธ์ที่ต้องการของโปรแกรมนี้คืออะไร? หากปราศจาก.parallel()ดูเหมือนว่านี่เป็นเพียงการแสดงผลsum(1+2+3+...)ซึ่งหมายความว่าเพียง "ติด" ที่กระแสแรกใน flatMap ซึ่งทำให้รู้สึก เมื่อใช้คู่ขนานฉันไม่รู้ว่ามีพฤติกรรมที่คาดหวังหรือไม่ แต่ฉันเดาว่าจะเป็นอย่างใดอย่างหนึ่งที่มันแทรกซึมnลำธารสายแรกหรือสายอื่นnๆ มันอาจแตกต่างกันเล็กน้อยขึ้นอยู่กับพฤติกรรมการ chunking / buffering ทำให้หน่วยความจำไม่เพียงพอคืออะไร ฉันพยายามทำความเข้าใจว่ากระแสเหล่านี้ถูกนำไปใช้อย่างไรภายใต้ประทุน ฉันคาดเดาสิ่งที่บล็อกกระแสดังนั้นมันไม่เคยเสร็จสิ้นและสามารถกำจัดค่าที่สร้างขึ้นได้ แต่ฉันไม่ค่อยรู้ว่าสิ่งใดที่เรียงลำดับตามการประเมินและที่การบัฟเฟอร์เกิดขึ้น แก้ไข:ในกรณีที่มีความเกี่ยวข้องฉันใช้ Java 11 Editt 2:เห็นได้ชัดว่าสิ่งเดียวกันที่เกิดขึ้นแม้สำหรับโปรแกรมที่ง่ายIntStream.iterate(1,i->i+1).limit(1000_000_000).parallel().sum()ดังนั้นจึงอาจจะต้องทำอย่างไรกับ lazyness ของมากกว่าlimitflatMap

1
มีกฎอะไรบ้างเกี่ยวกับฟังก์ชัน a -> () ที่ถูกประเมินใน Haskell
เช่นเดียวกับชื่อเรื่อง: สิ่งใดที่รับประกันว่าจะมีการประเมินฟังก์ชั่นการส่งคืนหน่วย Haskell? ใครจะคิดว่าไม่จำเป็นต้องเรียกใช้การประเมินผลใด ๆ ในกรณีเช่นนี้คอมไพเลอร์สามารถแทนที่การเรียกเช่นนั้นทั้งหมดด้วย()ค่าทันทีเว้นแต่จะมีการร้องขออย่างชัดเจนสำหรับความเข้มงวดที่มีอยู่ในกรณีนี้รหัสอาจต้องตัดสินใจว่าควร กลับ()หรือด้านล่าง ฉันได้ทดลองสิ่งนี้ใน GHCi และดูเหมือนว่าสิ่งตรงกันข้ามเกิดขึ้นนั่นคือฟังก์ชั่นดังกล่าวจะได้รับการประเมิน ตัวอย่างดั้งเดิมมากจะเป็น f :: a -> () f _ = undefined การประเมินf 1ข้อผิดพลาดเกิดขึ้นเนื่องจากการปรากฏตัวของundefinedดังนั้นการประเมินผลบางอย่างเกิดขึ้นแน่นอน แม้ว่าจะยังไม่ชัดเจนว่าการประเมินจะเกิดขึ้นในระดับใด ()บางครั้งก็ดูเหมือนจะเป็นไปตามที่ลึกที่สุดเท่าที่มันเป็นสิ่งจำเป็นในการประเมินทุกสายฟังก์ชั่นกลับมา ตัวอย่าง: g :: [a] -> () g [] = () g (_:xs) = g xs รหัสนี้จะวนg (let x = 1:x in x)ซ้ำไปเรื่อย ๆ หากแสดงด้วย แต่แล้ว f …

2
การคำนวณหมายเลข e โดยใช้ Raku
ฉันพยายามคำนวณค่าคงที่e ( หมายเลข AKA Euler's ) โดยการคำนวณสูตร เพื่อที่จะคำนวณแฟคทอเรียลและการหารในนัดเดียวฉันเขียนสิ่งนี้: my @e = 1, { state $a=1; 1 / ($_ * $a++) } ... *; say reduce * + * , @e[^10]; แต่มันก็ไม่ได้ผล ทำอย่างไรให้ถูกต้อง?

5
ฉันจะทำให้อัลกอริธึมนี้ดีกว่าโดยไม่ต้องทำซ้ำตัวเองได้อย่างไร
(ได้แรงบันดาลใจจากคำตอบของคำถามนี้ ) พิจารณารหัสนี้ (มันควรจะหาองค์ประกอบที่ใหญ่ที่สุดที่น้อยกว่าหรือเท่ากับอินพุตที่กำหนด): data TreeMap v = Leaf | Node Integer v (TreeMap v) (TreeMap v) deriving (Show, Read, Eq, Ord) closestLess :: Integer -> TreeMap v -> Maybe (Integer, v) closestLess i = precise Nothing where precise :: Maybe (Integer, v) -> TreeMap v -> Maybe (Integer, v) …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.