التابع Enumerable.lazy في روبي

من موسوعة حسوب

يعيد التابع lazy مُعدِّدًا كسولًا (lazy enumerator) تُعدِّد (enumerate) توابعه map/collect، و flat_map/collect_concat، و select/find_all، و rejectK، و grep، و grep_v، و zip، و take، و take_while، و drop، و drop_while القيم بحسب الحاجة. على أي حال، إن أعطيت كتلة لتجميع العناصر المكرَّرة وضغطها (zip)، فستُعدَّد القيم مباشرةً.

البنية العامة

lazy  lazy_enumerator

القيمة المعادة

يعاد مُعدِّدٌ كسول (lazy enumerator).

أمثلة

يوجد البرنامج التالي ثلاثية (مبرهنة) فيثاغورث (pythagorean triples):

def pythagorean_triples
  (1..Float::INFINITY).lazy.flat_map {|z|
    (1..z).flat_map {|x|
      (x..z).select {|y|
        x**2 + y**2 == z**2
      }.map {|y|
        [x, y, z]
      }
    }
  }
end
# إظهار عشر ثلاثيات لفيثاغورث أولًا
p pythagorean_triples.take(10).force # force كسولٌ، لذا نحتاج إلى التابع take إن التابع
p pythagorean_triples.first(10)      # حريص جدًا first التابع
# إظهار ثلاثيات فيثاغورث الأقل من 100
p pythagorean_triples.take_while { |*, z| z < 100 }.force

انظر أيضًا

  • التابع cycle: يستدعي الكتلة المعطاة مع كل عنصر من عناصر المُعدِّد الذي استدعي معه عددًا محدَّدًا من المرات أو إلى ما لانهاية إن مُرِّرت القيمة nil إليه أو لم يمُرَّر أي شيء.
  • التابع each_cons: يُكرِّر الكتلة المعطاة على كل مصفوفة من n عنصر متتالي من عناصر الكائن القابل للتعداد الذي استدعي معه.

مصادر