تثمين كسول
{{استرتيجية تثمين}}
في [[نظرية لغة البرمجة]]، إنَّ '''التثمين الكسول''' {{إنج|Lazy evaluation}} أو '''الاستدعاء عند الحاجة''' {{إنج|call-by-need}}<ref>{{استشهاد بهارفارد دون أقواس|Hudak|1989|p=384}}</ref>، هي [[استراتيجية تثمين]] تؤخِّر تثمين [[تعبير (علم الحاسوب)|التعبير]] لحين احتياج قيمته ([[استراتيجية تثمين#تثمين غير صارم|تثمين غير صارم]]) وَتتجنّب بذلك -[[مشاركة#في علوم الحاسب|مُشاركة]]- التَثمينات المُتكرِّرة.<ref name="WattFindlay2004">{{استشهاد بكتاب|مؤلف1=David Anthony Watt|مؤلف2=William Findlay|عنوان=Programming language design concepts|مسار=https://books.google.com/books?id=vogP3P2L4tgC&pg=PA367|تاريخ الوصول=30 December 2010|سنة=2004|ناشر=John Wiley and Sons|isbn=978-0-470-85320-7|صفحات=367–368| مسار أرشيف = https://web.archive.org/web/20170312135850/https://books.google.com/books?id=vogP3P2L4tgC&pg=PA367 | تاريخ أرشيف = 12 مارس 2017 }}</ref><ref>{{استشهاد بهارفارد دون أقواس|Reynolds|1998|p=307}}</ref> يُمكن للمُشاركة إنقاص وقت تشغيل دوال مُعيَّنة بعاملٍ [[نمو أسي|أُسِّي]] على استراتيجيَّات التثمين غير الصارم، مثل [[استراتيجية تثمين#تثمين غير صارم#استدعاء بالاسم|الاستدعاء بالاسم]].{{بحاجة لمصدر|تاريخ=فبراير 2017}}

تتضمَّن منافع التثمين الكسول:
* القدرة على تعريف بُنى [[تدفق السيطرة]] بتجريدٍ بدلًا من أن تكون مُدمجة.
* القدرة على تعريف [[بنية بيانات|بُنى بيانات]] [[لانهاية فعلية|مُمكنة الأزليَّة]]، يسمح هذا بتنفيذ دقيق للمزيد من الخوارزميَّات.
* زيادة الأداء بتجنُّب الحسابات غير الضروريَّة وَالأخطاء في حالة تثمين التعابير المُركَّبة.

غالبًا ما يُدمَج '''التثمين الكسول''' مع '''[[استحضار ذاكرة|استحضار الذاكرة]]'''(memoization أو memoisation)، كما قد ذُكِر في «كتابة برامج كفء»(Writing Efficient Programs) لِـ[[جون بينتلي (عالم حاسوب)|جون بينتلي]]، غالبًا ما يُدمَج التثمين الكسول مع [[تذكر|التذكُّر]].<ref>Bentley, Jon Louis. Writing Efficient Programs. Prentice-Hall, 1985. ISBN 978-0-13-970244-0</ref> بعد أن تُحوسب قيمة الدالَّة من أجل مُعطىً أو مجموعة من المُعطيات، فإنَّ النَّتيجة تُخَزَّن في جدول المُشاهدات المُفَهرَس وفق قيم المُعطيات؛ وفي المرَّة القادمة الَّتي سَتُستَدعى فيها الدالَّة سيتم تفقُّد الجدول لتحديد فيما إذا كانت نتيجة قيم المُعطيات متوفِّرةً بالفعل أم لا. عندها وببساطة سَتُعاد قيمة النتيجة المُخَزَّنة وَإن كان العكس فَسيتم تثمين الدالَّة وَيُضاف مُدخَل جديد إلى جدول المُشاهدات لِيُعاد استخدامه لاحقًا.

قد يؤدِّي التثمين الكسول إلى نقص في الذكرة اللّازمة للبرامج(المحجوزة لها)؛ لأنَّ القيم تُنسَئ عند الحاجة إليها.<ref name="Smith2009">{{استشهاد بكتاب|مؤلف=Chris Smith|عنوان=Programming F#|مسار=https://books.google.com/books?id=gzVdyw2WoXMC&pg=PA79|تاريخ الوصول=31 December 2010|تاريخ=22 October 2009|ناشر=O'Reilly Media, Inc.|isbn=978-0-596-15364-9|صفحة=79| مسار أرشيف = https://web.archive.org/web/20200113205727/https://books.google.com/books?id=gzVdyw2WoXMC&pg=PA79 | تاريخ أرشيف = 13 يناير 2020 }}</ref> ومن الصَّعب دمج التثمين الكسول مع المَزايا الأمريَّة مثل [[استيعاب الأخطاء]] وَ[[وحدات الإدخال والإخراج|الدخل/الخرج]]، لأنّ ترتيب العمليّات يصبح غيرَ مُحدَّدٍ. وَقد يسبّب التثمين الكسول [[تسرب الذاكرة]].<ref>Edward Z. Yang. [http://blog.ezyang.com/2011/05/space-leak-zoo/ "Space leak zoo"]. {{Webarchive|url=https://web.archive.org/web/20180117221422/http://blog.ezyang.com/2011/05/space-leak-zoo/ |date=17 يناير 2018}}</ref>

عكس التثمين الكسول هو «[[تثمين لهوف|التثمين اللَّهوف]]» (eager evaluation)؛ وَأحيانًا يُعرَف باسم التثمين الصارم (strict evaluation). ولقد وظِّف التثمين اللَّهوف كاستراتيجيّة تثمين في أغلب [[لغة برمجة|لُغات البرمجة]].

== لمحة تاريخيّة ==
قُدِّمَ التثمين الكسول من أجل [[تكامل لامدا|حسابات اللامدا]] من قِبَل كريستوفر وادز-ورث<ref>{{Harvard citation|Wadsworth|1971}}</ref> وَباستقلالٍ من أجل لُغات البرمجة من قِبَل بيتر هيندرسن وَ[[جيمس حيرم موريس]]<ref>{{Harvard citation|Henderson|Morris|1976}}</ref> وَ[[دانيال بول فريدمان]] وَديفيد س. وايز.<ref>{{Harvard citation|Friedman|Wise|1976}}</ref><ref>{{استشهاد بهارفارد دون أقواس|Reynolds|1998|p=312}}</ref>

== التطبيقات ==
يُستخدم التثمين المؤجَّل(Delayed evaluation) تحديدًا في لُغات [[برمجة وظيفية|البرمجة الوظيفيَّة]]. فعند استخدام التثمين المؤجَّل، لا يتم تثمين التعبير عند إسناده إلى مُتَغَيِّر بل يُثَمَّن عند الحاجة لإنتاج قيمة التعبير. هذه إفادة كمثال، <code>x:=expression;</code> (إسناد نتيجة التعبير إلى مُتَغَيِّر). بوضوحٍ، تَمَّ استدعاء التعبير بُغية تثمينه وَوُضِعَت النتيجة في <code>x</code>، لكن يتم تعليق ما بداخل <code>x</code> لِحين احتياج قيمته وذلك باستخدام فهرس يقود إلى <code>x</code> في تعبيرٍ ما لاحِقٍ وقد يكون هذا التعبير أيضًا مؤجّلًا، وأخيرًا تُشَذَّب شجرة الاعتماديَّات النامية هذه لإنتاج بعض الرموز الّتي يُفَضَّل رؤيتها.<ref name="Wadler2006">{{استشهاد بكتاب|مؤلف=Philip Wadler|عنوان=Functional and logic programming: 8th international symposium, FLOPS 2006, Fuji-Susono, Japan, April 24-26, 2006 : proceedings|مسار=https://books.google.com/books?id=gZzLFFZfc1sC&pg=PA149|تاريخ الوصول=14 January 2011|سنة=2006|ناشر=Springer|isbn=978-3-540-33438-5|صفحة=149| مسار أرشيف = https://web.archive.org/web/20200114024219/https://books.google.com/books?id=gZzLFFZfc1sC&pg=PA149 | تاريخ أرشيف = 14 يناير 2020 }}</ref>

من فوائد التثمين المؤجَّل قدرته على إنشاء قوائم لانهائيَّة قابلة للحِساب بدون تداخل الحلقات اللَّانهائيَّة أو الحجم في الحِساب. كمثال، يُمكن إنشاء دالَّة تُنشِئ قائمة لانهائيَّة (تُدعى غالبًا «[[جريان (حوسبة)|جريان]]») من [[عدد فيبوناتشي|أعداد فيبوناتشي]]. إنَّ حِساب عدد فيبوناتشيّ ما -وليكن «ن»- سيكون بكلّ بساطة استخلاصًا لهذا العنصر -الّذي هو العدد «ن»- من القائمة اللَّانهائيَّة، مُجبرًا بذلك على تثمين أوَّل ن عنصر من القائمة.<ref name="Métayer2002">{{استشهاد بكتاب|مؤلف=Daniel Le Métayer|عنوان=Programming languages and systems: 11th European Symposium on Programming, ESOP 2002, held as part of the Joint European Conferences on Theory and Practice of Software, ETAPS 2002, Grenoble, France, April 8-12, 2002 : proceedings|مسار=https://books.google.com/books?id=dYZyzp-I9hQC&pg=PA129|تاريخ الوصول=14 January 2011|سنة=2002|ناشر=Springer|isbn=978-3-540-43363-7|صفحات=129–132| مسار أرشيف = https://web.archive.org/web/20200414171316/https://books.google.com/books?id=dYZyzp-I9hQC&pg=PA129 | تاريخ أرشيف = 14 أبريل 2020 }}</ref><ref name="MachineryLanguages2002">{{استشهاد بكتاب|مؤلف1=Association for Computing Machinery|مؤلف2=ACM Special Interest Group on Programming Languages|عنوان=Proceedings of the 2002 ACM SIGPLAN Haskell Workshop (Haskell '02): Pittsburgh, Pennsylvania, USA ; October 3, 2002|مسار=https://books.google.com/books?id=hsBQAAAAMAAJ|تاريخ الوصول=14 January 2011|تاريخ=1 January 2002|ناشر=Association for Computing Machinery|isbn=978-1-58113-605-0|صفحة=40| مسار أرشيف = https://web.archive.org/web/20170312124547/https://books.google.com/books?id=hsBQAAAAMAAJ | تاريخ أرشيف = 12 مارس 2017 }}</ref>

كمثال، يُمكن في لغة البرمجة [[هاسكل (لغة برمجة)|هاسكل]] كتابة قائمة بكلّ أعداد فيبوناتشي كالتالي:<ref name="MachineryLanguages2002"/>

<syntaxhighlight lang="haskell">
 fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
</syntaxhighlight>

في نحويَّة هاسكل، «<code>:</code>» تُضيف عنصرًا إلى بداية القائمة وَ«<code>tail</code>» تعود بالقائمة بدون عنصرها الأوَّل وَ«<code>zipWith</code>» تَستَخدِم دالَّة مُعَيَّنة (في حالتنا هذه هي الجمع «'''+'''») لجمع العناصر المُتوافقة لِكلا القائمتين بهدف إنتاج قائمة ثالثة.<ref name="Métayer2002"/>

يجب أن يكون المبرمج حذرًا وَدقيقًا؛ لأنّه يتم فقط تثمين القيم اللّازمة لإنتاج نتيجة معيّنة. ومع ذلك، قد تؤدّي بعض الحسابات إلى محاولة البرنامج لتثمين عدد لا حصر له من العناصر؛ على سبيل المثال، طلب طول القائمة أو محاولة جمع عناصر القائمة بعملية [[طي (وظيفة عالية-الرتبة)|الطيّ]] <!--Fold (higher-order function)--> يؤدي بالبرنامج إمَّا إلى فشل الإنهاء أو [[نفاد الذاكرة]].

=== بُنى التحكّم ===
في كلّ اللّغات «اللّهوفة» تقريبًا، يتمّ تثمين الإفادة «if» بأسلوب كسولٍ.
 if a then b else c
سيتمّ تثمين (a)، وَإذا وَفقط إذا ثُمِّنَت (a) لتكون صح «true» سيتمّ تثمين (b) وَإلّا سيتمّ تثمين (c). وبذلك لن يتمّ تثمين واحد من (b) وَ (c). بالمُقابِل، سيكون السلوك المُتَوَقَّع هو هذا:
 define f(x, y) = 2 * x
 set k = f(d, e)
سيتمّ تثمين (e) عند حِساب قيمة f(d, e) وعلى الرُّغم من ذلك فقيمة (e) غير مُستخدمة في الدالَّة f. وبالتالي تعتمد [[تدفق السيطرة|بُنى التحكّم]] المُعرَّفة من قِبَل المُستَخدِم على النحويَّة المضبوطة، كمثال:
 define g(a, b, c) = if a then b else c
 l = g(h, i, j)
سيتمّ تثمين كُلٍّ من (i) وَ (j) في اللُّغة اللَّهوفة. بينما في اللُّغة الكسولة،
 l' = if h then i else j
سيتمّ تثمين إمَّا (i) أو (j)، ولن يتمّ تثمين كليهما معًا أبدًا.

يسمَح التثمين الكسول بتعريف بُنى التحكّم طبيعيًّا، وَلكن لا يسمح لها أن تكون مُدمَجة<!--primitives--> أو كتقنيّات وقت-التجميع<!--compile-time techniques-->. فإذا كان لِـ (i) أو (j) آثارًا جانبيّةً أو أثارت أخطاءً في وقت التشغيل، عنها ستكون الاختلافات غير الملحوظة بين (l) وَ (l') مُعَقَّدَةً. وَمن المُمكن عادةً إنشاء بُنى تحكّمٍ كسولة يُعرّفها المُستخدِم [[دالة (برمجة)|كَدوالٍّ]] في اللُّغات اللَّهوفة، لذلك قد تُزاح تلك [[دالة (برمجة)|الدَّوال]] من نحويَّة اللُّغة عند التثمين اللَّهوف: غالبًا ما يُحتَاج ادّثار جسد الشِفرة (مثل: (i) وَ (j)) ليصبح قيمة الدالَّة، ولذلك يتمّ فقط تنفيذها عند الاستدعاء.

يُدعى ال[[تثمين قصير الدوران]]<!--Short-circuit evaluation--> (وَيُسمّى أيضًا: تثمين دُونيّ أو تثمين مَكارثي) لِبُنى التحكّم [[جبر بول|البوليانيّة]](المنطقيّة) تثمينًا «كسولًا».

=== العمل مع بُنى بيانات أزليّة ===
توفّر العديد من اللُّغات مفهوم «بُنى-البيانات الأزليّة (لا محدودة)» {{إنج|infinite data-structures}}. ويسمح ذلك بتعريف البيانات كمجالات أزليّة أو كتعاوديّة غير منتهية (unending recursion)، لكن يتمّ حساب القيم الفعليّة عندما نحتاجها فحسب. تفقّد هذا المِثال المتواضع؛ وهو برنامج في لغة هاسكل:

<syntaxhighlight lang="haskell">
numberFromInfiniteList :: Int -> Int
numberFromInfiniteList n = infinity !! n - 1
    where infinity = [1..]

main = print $ numberFromInfiniteList 4
</syntaxhighlight>

في الدالَّة <tt>numberFromInfiniteList</tt>، إنّ قيمة <tt>infinity</tt> هي مجال لا محدود، ولحين احتياجه يتمّ تثمين المجال وصولًا إلى المؤشِّر (index) المطلوب.

== المراجع ==

{{مراجع}}
{{شريط بوابات|برمجة الحاسوب|علم الحاسوب}}

[[تصنيف:تحقيق أمثلية المجمع]]
[[تصنيف:إستراتيجية تثمين]]
[[تصنيف:تنفيذ للغات البرمجة الوظيفية]]
في نظرية لغة البرمجة، إنَّ التثمين الكسول  أو الاستدعاء عند الحاجة ، هي استراتيجية تثمين تؤخِّر تثمين التعبير لحين احتياج قيمته (تثمين غير صارم) وَتتجنّب بذلك -مُشاركة- التَثمينات المُتكرِّرة. يُمكن للمُشاركة إنقاص وقت تشغيل دوال مُعيَّنة بعاملٍ أُسِّي على استراتيجيَّات التثمين غير الصارم، مثل الاستدعاء بالاسم.

تتضمَّن منافع التثمين الكسول:
 القدرة على تعريف بُنى تدفق السيطرة بتجريدٍ بدلًا من أن تكون مُدمجة.
 القدرة على تعريف بُنى بيانات مُمكنة الأزليَّة، يسمح هذا بتنفيذ دقيق للمزيد من الخوارزميَّات.
 زيادة الأداء بتجنُّب الحسابات غير الضروريَّة وَالأخطاء في حالة تثمين التعابير المُركَّبة.

غالبًا ما يُدمَج التثمين الكسول مع استحضار الذاكرة(memoization أو memoisation)، كما قد ذُكِر في «كتابة برامج كفء»(Writing Efficient Programs) لِـجون بينتلي، غالبًا ما يُدمَج التثمين الكسول مع التذكُّر.Bentley, Jon Louis. Writing Efficient Programs. Prentice-Hall, 1985. ISBN 978-0-13-970244-0 بعد أن تُحوسب قيمة الدالَّة من أجل مُعطىً أو مجموعة من المُعطيات، فإنَّ النَّتيجة تُخَزَّن في جدول المُشاهدات المُفَهرَس وفق قيم المُعطيات؛ وفي المرَّة القادمة الَّتي سَتُستَدعى فيها الدالَّة سيتم تفقُّد الجدول لتحديد فيما إذا كانت نتيجة قيم المُعطيات متوفِّرةً بالفعل أم لا. عندها وببساطة سَتُعاد قيمة النتيجة المُخَزَّنة وَإن كان العكس فَسيتم تثمين الدالَّة وَيُضاف مُدخَل جديد إلى جدول المُشاهدات لِيُعاد استخدامه لاحقًا.

قد يؤدِّي التثمين الكسول إلى نقص في الذكرة اللّازمة للبرامج(المحجوزة لها)؛ لأنَّ القيم تُنسَئ عند الحاجة إليها. ومن الصَّعب دمج التثمين الكسول مع المَزايا الأمريَّة مثل استيعاب الأخطاء وَالدخل/الخرج، لأنّ ترتيب العمليّات يصبح غيرَ مُحدَّدٍ. وَقد يسبّب التثمين الكسول تسرب الذاكرة.Edward Z. Yang. "Space leak zoo". 

عكس التثمين الكسول هو «التثمين اللَّهوف» (eager evaluation)؛ وَأحيانًا يُعرَف باسم التثمين الصارم (strict evaluation). ولقد وظِّف التثمين اللَّهوف كاستراتيجيّة تثمين في أغلب لُغات البرمجة.

 لمحة تاريخيّة 
قُدِّمَ التثمين الكسول من أجل حسابات اللامدا من قِبَل كريستوفر وادز-ورث وَباستقلالٍ من أجل لُغات البرمجة من قِبَل بيتر هيندرسن وَجيمس حيرم موريس وَدانيال بول فريدمان وَديفيد س. وايز.

 التطبيقات 
يُستخدم التثمين المؤجَّل(Delayed evaluation) تحديدًا في لُغات البرمجة الوظيفيَّة. فعند استخدام التثمين المؤجَّل، لا يتم تثمين التعبير عند إسناده إلى مُتَغَيِّر بل يُثَمَّن عند الحاجة لإنتاج قيمة التعبير. هذه إفادة كمثال، x:=expression; (إسناد نتيجة التعبير إلى مُتَغَيِّر). بوضوحٍ، تَمَّ استدعاء التعبير بُغية تثمينه وَوُضِعَت النتيجة في x، لكن يتم تعليق ما بداخل x لِحين احتياج قيمته وذلك باستخدام فهرس يقود إلى x في تعبيرٍ ما لاحِقٍ وقد يكون هذا التعبير أيضًا مؤجّلًا، وأخيرًا تُشَذَّب شجرة الاعتماديَّات النامية هذه لإنتاج بعض الرموز الّتي يُفَضَّل رؤيتها.

من فوائد التثمين المؤجَّل قدرته على إنشاء قوائم لانهائيَّة قابلة للحِساب بدون تداخل الحلقات اللَّانهائيَّة أو الحجم في الحِساب. كمثال، يُمكن إنشاء دالَّة تُنشِئ قائمة لانهائيَّة (تُدعى غالبًا «جريان») من أعداد فيبوناتشي. إنَّ حِساب عدد فيبوناتشيّ ما -وليكن «ن»- سيكون بكلّ بساطة استخلاصًا لهذا العنصر -الّذي هو العدد «ن»- من القائمة اللَّانهائيَّة، مُجبرًا بذلك على تثمين أوَّل ن عنصر من القائمة.

كمثال، يُمكن في لغة البرمجة هاسكل كتابة قائمة بكلّ أعداد فيبوناتشي كالتالي:

 fibs = 0 : 1 : zipWith (+) fibs (tail fibs)

في نحويَّة هاسكل، «:» تُضيف عنصرًا إلى بداية القائمة وَ«tail» تعود بالقائمة بدون عنصرها الأوَّل وَ«zipWith» تَستَخدِم دالَّة مُعَيَّنة (في حالتنا هذه هي الجمع «+») لجمع العناصر المُتوافقة لِكلا القائمتين بهدف إنتاج قائمة ثالثة.

يجب أن يكون المبرمج حذرًا وَدقيقًا؛ لأنّه يتم فقط تثمين القيم اللّازمة لإنتاج نتيجة معيّنة. ومع ذلك، قد تؤدّي بعض الحسابات إلى محاولة البرنامج لتثمين عدد لا حصر له من العناصر؛ على سبيل المثال، طلب طول القائمة أو محاولة جمع عناصر القائمة بعملية الطيّ  يؤدي بالبرنامج إمَّا إلى فشل الإنهاء أو نفاد الذاكرة.

 بُنى التحكّم 
في كلّ اللّغات «اللّهوفة» تقريبًا، يتمّ تثمين الإفادة «if» بأسلوب كسولٍ.
 if a then b else c
سيتمّ تثمين (a)، وَإذا وَفقط إذا ثُمِّنَت (a) لتكون صح «true» سيتمّ تثمين (b) وَإلّا سيتمّ تثمين (c). وبذلك لن يتمّ تثمين واحد من (b) وَ (c). بالمُقابِل، سيكون السلوك المُتَوَقَّع هو هذا:
 define f(x, y) = 2 * x
 set k = f(d, e)
سيتمّ تثمين (e) عند حِساب قيمة f(d, e) وعلى الرُّغم من ذلك فقيمة (e) غير مُستخدمة في الدالَّة f. وبالتالي تعتمد بُنى التحكّم المُعرَّفة من قِبَل المُستَخدِم على النحويَّة المضبوطة، كمثال:
 define g(a, b, c) = if a then b else c
 l = g(h, i, j)
سيتمّ تثمين كُلٍّ من (i) وَ (j) في اللُّغة اللَّهوفة. بينما في اللُّغة الكسولة،
 l' = if h then i else j
سيتمّ تثمين إمَّا (i) أو (j)، ولن يتمّ تثمين كليهما معًا أبدًا.

يسمَح التثمين الكسول بتعريف بُنى التحكّم طبيعيًّا، وَلكن لا يسمح لها أن تكون مُدمَجة أو كتقنيّات وقت-التجميع. فإذا كان لِـ (i) أو (j) آثارًا جانبيّةً أو أثارت أخطاءً في وقت التشغيل، عنها ستكون الاختلافات غير الملحوظة بين (l) وَ (l') مُعَقَّدَةً. وَمن المُمكن عادةً إنشاء بُنى تحكّمٍ كسولة يُعرّفها المُستخدِم كَدوالٍّ في اللُّغات اللَّهوفة، لذلك قد تُزاح تلك الدَّوال من نحويَّة اللُّغة عند التثمين اللَّهوف: غالبًا ما يُحتَاج ادّثار جسد الشِفرة (مثل: (i) وَ (j)) ليصبح قيمة الدالَّة، ولذلك يتمّ فقط تنفيذها عند الاستدعاء.

يُدعى التثمين قصير الدوران (وَيُسمّى أيضًا: تثمين دُونيّ أو تثمين مَكارثي) لِبُنى التحكّم البوليانيّة(المنطقيّة) تثمينًا «كسولًا».

 العمل مع بُنى بيانات أزليّة 
توفّر العديد من اللُّغات مفهوم «بُنى-البيانات الأزليّة (لا محدودة)» . ويسمح ذلك بتعريف البيانات كمجالات أزليّة أو كتعاوديّة غير منتهية (unending recursion)، لكن يتمّ حساب القيم الفعليّة عندما نحتاجها فحسب. تفقّد هذا المِثال المتواضع؛ وهو برنامج في لغة هاسكل:

numberFromInfiniteList :: Int -> Int
numberFromInfiniteList n = infinity !! n - 1
    where infinity = [1..]

main = print $ numberFromInfiniteList 4

في الدالَّة numberFromInfiniteList، إنّ قيمة infinity هي مجال لا محدود، ولحين احتياجه يتمّ تثمين المجال وصولًا إلى المؤشِّر (index) المطلوب.

 المراجع 

تصنيف:تحقيق أمثلية المجمع
تصنيف:إستراتيجية تثمين
تصنيف:تنفيذ للغات البرمجة الوظيفية