نوع البيانات المتكرر
في برمجة الحاسوب ، يُعرف نوع البيانات التكراري بأنه نوع بيانات يحتوي تعريفه على قيم من نفس النوع. ويُعرف أيضًا باسم نوع البيانات المُعرَّف تكراريًا أو المُعرَّف استقرائيًا . وعادةً ما تُعرض بيانات الأنواع التكرارية على شكل رسوم بيانية موجهة .
يُعدّ تعريف هياكل البيانات الديناميكية، مثل القوائم والأشجار، أحد أهم تطبيقات الاستدعاء الذاتي في علوم الحاسوب. إذ يمكن لهياكل البيانات الاستدعائية أن تنمو ديناميكيًا إلى حجم كبير جدًا استجابةً لمتطلبات وقت التشغيل؛ في المقابل، يجب تحديد متطلبات حجم المصفوفة الثابتة في وقت الترجمة.
أحيانًا يُستخدم مصطلح "نوع البيانات الاستقرائي" لأنواع البيانات الجبرية التي ليست بالضرورة متكررة.
مثال
ومن الأمثلة على ذلك نوع القائمة في لغة هاسكل :
data List a = Nil | Cons a ( List a )يشير هذا إلى أن قائمة من a هي إما قائمة فارغة أو خلية cons تحتوي على 'a' (رأس القائمة) وقائمة أخرى (ذيل القائمة).
مثال آخر هو نوع الارتباط الأحادي المماثل في جافا :
public class LinkedList <E> { private E value ; private LinkedList <E> next ; } }// المُنشئ والأساليب... }يشير هذا إلى أن القائمة غير الفارغة من النوع Eتحتوي على عضو بيانات من النوع E، وإشارة إلى كائن قائمة آخر لبقية القائمة (أو إشارة فارغة للإشارة إلى أن هذه هي نهاية القائمة).
أنواع البيانات المتكررة المتبادلة
يمكن أيضًا تعريف أنواع البيانات عن طريق الاستدعاء الذاتي المتبادل . وأهم مثال أساسي على ذلك هو الشجرة ، التي يمكن تعريفها بشكل استدعائي متبادل بدلالة الغابة (قائمة من الأشجار). رمزيًا:
f: [t[1], ..., t[k]] t: vfتتكون الغابة f من قائمة من الأشجار، بينما تتكون الشجرة t من زوج من القيمة v والغابة f (أبنائها). هذا التعريف أنيق وسهل التطبيق في المفاهيم المجردة (كما هو الحال عند إثبات نظريات حول خصائص الأشجار)، لأنه يعبر عن الشجرة بعبارات بسيطة: قائمة من نوع واحد، وزوج من نوعين.
يمكن تحويل هذا التعريف المتداخل إلى تعريف متداخل بشكل فردي عن طريق تضمين تعريف الغابة:
t: v [t[1], ..., t[k]]تتكون الشجرة t من زوج من القيمة v وقائمة من الأشجار (أبنائها). هذا التعريف أكثر إيجازًا، ولكنه أكثر تعقيدًا بعض الشيء: تتكون الشجرة من زوج من نوع وقائمة من نوع آخر، مما يتطلب فصلهما لإثبات النتائج المتعلقة بهما.
في لغة النمذجة القياسية (Standard ML) ، يمكن تعريف أنواع بيانات الشجرة والغابة بشكل متكرر متبادل على النحو التالي، مما يسمح بالأشجار الفارغة: [ 1 ]
نوع البيانات 'a tree = فارغ | عقدة من 'a * 'a forest و 'a forest = لا شيء | عقدة من 'a tree * 'a forestفي لغة هاسكل، يمكن تعريف أنواع بيانات الشجرة والغابة بشكل مشابه:
data Tree a = Empty | Node ( a , Forest a )data Forest a = Nil | Cons ( Tree a ) ( Forest a )نظرية
في نظرية الأنواع ، يكون للنوع المتكرر الشكل العام μα . T حيث يمكن أن يظهر متغير النوع α في النوع T ويمثل النوع بأكمله نفسه.
على سبيل المثال، يمكن تعريف الأعداد الطبيعية (انظر حساب بيانو ) بواسطة نوع بيانات هاسكل:
بيانات طبيعية = صفر | طبيعية متتابعةفي نظرية الأنواع، نقول:حيث يمثل ذراعا نوع المجموع مُنشئي البيانات Zero و Succ. لا يأخذ Zero أي وسيط (وبالتالي يُمثله نوع الوحدة )، بينما يأخذ Succ قيمة طبيعية أخرى (وبالتالي عنصرًا آخر من).
يوجد نوعان من الأنواع التكرارية: الأنواع التكرارية المتساوية، والأنواع التكرارية المتساوية. ويكمن الاختلاف بين النوعين في كيفية إدخال وحذف حدود النوع التكراري.
أنواع متماثلة التكرار
مع الأنواع المتماثلة، النوع المتكرروتوسعها (أو فردها )(حيث الترميز)يشير هذا إلى استبدال جميع حالات Z بـ Y في X) وهي أنواع متميزة (ومنفصلة) ذات بنى مصطلحية خاصة، تُسمى عادةً roll و unroll ، والتي تُشكل تماثلًا بينها. بتعبير أدق:ووهاتان الدالتان دالتان عكسيتان .
أنواع التكرار المتساوي
بموجب قواعد الاستدعاء المشروط، نوع متكرروتكشفهامتساوية – أي أن تعبيري النوع هذين يُفهم أنهما يدلان على النوع نفسه. في الواقع، تذهب معظم نظريات الأنواع المتساوية التكرار إلى أبعد من ذلك، وتنص أساسًا على أن أي تعبيري نوع لهما نفس "التوسع اللانهائي" متكافئان. ونتيجةً لهذه القواعد، تُضيف الأنواع المتساوية التكرار تعقيدًا أكبر بكثير إلى نظام الأنواع مقارنةً بالأنواع المتساوية التكرار. كما أن المشكلات الخوارزمية، مثل التحقق من النوع واستنتاج النوع، تُصبح أكثر صعوبة بالنسبة للأنواع المتساوية التكرار. ولأن المقارنة المباشرة غير منطقية في الأنواع المتساوية التكرار، يُمكن تحويلها إلى شكل معياري في زمن O(n log n)، والذي يُمكن مقارنته بسهولة. [ 2 ]
تُجسّد الأنواع المتماثلة شكل تعريفات الأنواع ذاتية المرجعية (أو المتبادلة المرجعية) الموجودة في لغات البرمجة الكائنية التوجه الاسمية ، وتظهر أيضًا في الدلالات النظرية للأنواع للكائنات والفئات . وفي لغات البرمجة الوظيفية، تُعدّ الأنواع المتماثلة (في صورة أنواع البيانات) شائعة أيضًا. [ 3 ]
مرادفات النوع التكراري
في لغة TypeScript ، يُسمح بالتكرار في أسماء الأنواع المستعارة. [ 4 ]
انظر أيضاً
مراجع
- ↑ هاربر 1998 .
- ↑ "أهمية الترقيم: الأشكال القانونية من الدرجة الأولى للأنواع التكرارية من الدرجة الثانية". CiteSeerX 10.1.1.4.2276 .
- ↑ إعادة النظر في التنميط الفرعي المتماثل التكراري | وقائع مؤتمر ACM حول لغات البرمجة
- ↑ (المزيد) من أسماء الأنواع المتكررة - الإعلان عن TypeScript 3.7 - TypeScript
مصادر
- هاربر، روبرت (1998)، إعلانات أنواع البيانات ، مؤرشفة من الأصل في 1999-10-01
- أنواع البيانات
- نظرية الأنواع
