اشتمال قائمة (برمجة)

**اشتمال قائمة**  هو بناء نحوي متوفر في بعض لغات البرمجة لإنشاء قائمة بناءاً على القوائم الموجودة. وهي تتبع الصيغة لل*تدوين* الرياضي في *منشئ المجموعة* (اشتمال مجموعة) تمييزا لها عن استخدام دوال **الخريطة الربطية map** و **الفلاتر filter**.

## نظرة عامة
لنضع في الاعتبار المثال التالي في تدوين باني المجموعة.

: S=\{2\cdot x\mid x \in \mathbb{N},\ x^2>3\}

أو غالبًا

: S=\{2\cdot x : x \in \mathbb{N},\ x^2>3\}

يمكن قراءة هذا، " S هي مجموعة كل الأرقام "مرتين x " مثل ذلك الـ x هو عنصر أو عضو في مجموعة الأعداد الطبيعية (\mathbb{N})، وتربيع x أكبر من 3 ".

أصغر رقم طبيعي، x = 1 ، لا يستوفي الشرط x^2>3  (الشرط 1^ 2 > 3  غير صحيح) لذلك 2 * 1  غير مدرج في S . الرقم الطبيعي التالي، 2، يستوفي الشرط (2^ 2 > 3  ) مثل كل رقم طبيعي آخر. وهكذا يتكون x  من 2,3,4,5...  بما أن المجموعة S  تتكون من جميع الأرقام " مرتين x   "، يتم الحصول عليها من S = {4, 6, 8, 10,...}  . بعبارة أخرى، S هي مجموعة جميع الأرقام الزوجية الأكبر من 2.

في هذه النسخة المدونة رياضياً من المثال السابق:

: S=\{\underbrace{2\cdot x}_{\color{Violet}{\text{output expression}}}\mid \underbrace{x}_{\color{Violet}{\text{variable}}} \in \underbrace{\mathbb{N}}_{\color{Violet}{\text{input set}}},\ \underbrace{x^2>3}_{\color{Violet}{\text{predicate}}}\}

* x هو المتغير الذي يمثل أعضاء مجموعة الإدخال.
* \mathbb{N} يمثل مجموعة المدخلات، والتي في هذا المثال هي مجموعة من الأعداد الطبيعية
* x^2>3 هو تعبير أصلي يعمل كمرشح على أعضاء مجموعة الإدخال.
* 2\cdot x هو تعبير إخراج ينتج أعضاء المجموعة الجديدة من أعضاء مجموعة الإدخال التي تفي بالتعبير الأصلي.
* \{\} تشير الأقواس إلى أن النتيجة هي مجموعة.
* \mid, تتم قراءة الشريط العمودي على أنه «مثل هذا». يتم استخدام الشريط والفاصلة ":" بالتبادل.
* تفصل الفواصل بين المسندات predicates ويمكن قراءتها كـ «و».

يحتوي اشتمال القائمة على نفس الأجزاء النحوية لتمثيل *التوليد من قائمة* بالترتيب من *قائمة الإدخال* أو  :

* متغير يمثل أعضاء قائمة المدخلات.
* قائمة الإدخال (أو المكرر).
* تعبير أصلي اختياري.
* و*تعبير إخراج* ينتج *أعضاء قائمة الإخراج* من *أعضاء المدخلات القابلة للتكرار* التي تستوفي المسند.

*ترتيب توليد أعضاء قائمة المخرجات* يعتمد على ترتيب العناصر في الإدخال.

في التركيب النحوي لاشتمال القائمة في لغة هاسكل، يتم كتابة إنشاء باني المجموعة بشكل مشابه، وعلى النحو التالي: 
```haskell
s = [ 2*x | x <- [0..], x^2 > 3 ]
```
 هنا، تمثل القائمة `[0..]` \mathbb{N} ، يمثل `x^2>3` المسند، ويمثل `2*x` تعبير الإخراج.

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

## انظر أيضًا

* عبارة SELECT مع عبارات FROM و WHERE في SQL

## ملاحظات ومراجع

* قائمة الفهم في القاموس المجاني للحوسبة، المحرر دينيس هاو.
* Trinder, Phil (1992). «الفهم، تدوين الاستعلام لـ DBPLs». وقائع ورشة العمل الدولية الثالثة حول لغات برمجة قواعد البيانات: الأنواع بالجملة والبيانات الثابتة، Nafplion ، اليونان. ص.   55-68.
* Wadler, Philip (1990). «فهم الموناد». وقائع مؤتمر ACM 1990 حول LISP والبرمجة الوظيفية، نيس.
* Wong, Limsoon (2000). «الشجاعة الوظيفية لنظام الاستعلام كليزلي». وقائع المؤتمر الدولي الخامس ACM SIGPLAN حول البرمجة الوظيفية. المؤتمر الدولي للبرمجة الوظيفية. ص.   1-10.

### هاسكل

* تقرير هاسكل 98، الفصل 3.11 قائمة الفهم .
* دليل المستخدم لنظام تجميع غلاسكو هاسكل المجيد، الفصل 7.3.4 فهم القائمة المتوازية .
* دليل مستخدم Hugs 98، الفصل 5.1.2 استيعاب القائمة الموازية (ويعرف أيضًا باسم ملفات zip) .

### OCaml

* وشملت بطاريات OCaml
* تم تضمين ملحقات اللغة في OCaml بطاريات

### بيثون

* دروس بايثون، قائمة الفهم .
* Python Language Reference ، تعرض القائمة .
* مقترح تحسين Python PEP 202: قائمة الفهم .
* Python Language Reference ، تعبيرات المولد .
* مقترح تحسين Python PEP 289: تعبيرات المولد .

### الليسب المشتركة

* تنفيذ Guy Lapalme لماكرو الفهم Lisp

### كلوجور

* وثائق API كلوجر - ''الماكرو''

### اكسيوم

* أمثلة تيار اكسيوم

## روابط خارجية

* عمليات مجموعة شبيهة بـ SQL مع قوائم أحادية الفهم في القائمة في Python Cookbook
* مناقشة حول فهم القائمة في مخطط والبنيات ذات الصلة
* اسرد الاستيعاب عبر اللغات

تصنيف:بنى البرمجة