نوع الدالة
في علوم الحاسوب والمنطق الرياضي ، نوع الدالة (أو نوع السهم أو الأسي ) هو نوع المتغير أو المعامل الذي يمكن تعيين دالة له أو له، أو نوع الوسيط أو النتيجة لدالة من الدرجة العليا تأخذ أو تعيد دالة.
يعتمد نوع الدالة على نوع المعاملات ونوع نتيجة الدالة (وهي، أو بالأحرى مُنشئ النوع· → · غير المُطبق ، نوع من رتبة أعلى ). في الأطر النظرية ولغات البرمجة التي تُعرَّف فيها الدوال بصيغة مُجزأة ، مثل حساب لامدا البسيط ، يعتمد نوع الدالة على نوعين فقط، وهما المجال A والمدى B. يُشار إلى نوع الدالة هنا غالبًا بـ A → B ، وفقًا للعرف الرياضي، أو B → A ، استنادًا إلى وجود B → A (عدد أُسّي) من دوال نظرية المجموعات التي تُسقط A على B في فئة المجموعات . تُسمى فئة هذه الدوال أو الإسقاطات بالكائن الأُسّي . تجعل عملية التجزئة نوع الدالة مُرافقًا لنوع الضرب ؛ ويتم استكشاف ذلك بالتفصيل في مقال التجزئة.
يمكن اعتبار نوع الدالة حالة خاصة من نوع المنتج التابع ، والذي يتضمن من بين خصائص أخرى فكرة الدالة متعددة الأشكال .
لغات البرمجة
يمكن تلخيص الصيغة المستخدمة لأنواع الدوال في العديد من لغات البرمجة، بما في ذلك مثال على توقيع نوع دالة تركيب الدوال من الرتبة العليا :
| لغة | الترميز | مثال على توقيع النوع | |
|---|---|---|---|
| باستخدام الدوال من الدرجة الأولى ، تعدد الأشكال البارامتري | سي شارب | Func<α1,α2,...,αn,ρ> | Func<A,C>compose(Func<B,C>f,Func<A,B>g); |
| هاسكل | α -> ρ | compose::(b->c)->(a->b)->a->c | |
| أوكاميل | α -> ρ | compose:('b->'c)->('a->'b)->'a->'c | |
| سكالا | (α1,α2,...,αn) => ρ | defcompose[A,B,C](f:B=>C,g:A=>B):A=>C | |
| لغة الآلة القياسية | α -> ρ | compose:('b->'c)->('a->'b)->'a->'c | |
| سويفت | α -> ρ | funccompose<A,B,C>(f:(B)->C,g:(A)->B)->(A)->C | |
| الصدأ | fn(α1,α2,...,αn) -> ρ | fncompose<A,B,C>(f:fn(A)->B,g:fn(B)->C)->fn(A)->C | |
| باستخدام الدوال من الدرجة الأولى ، بدون تعدد الأشكال البارامتري | يذهب | func(α1,α2,...,αn) ρ | varcomposefunc(func(int)int,func(int)int)func(int)int |
| لغة C++ ، لغة Objective-C ، مع الكتل البرمجية | ρ (^)(α1,α2,...,αn) | int(^compose(int(^f)(int),int(^g)(int)))(int); | |
| بدون دوال من الدرجة الأولى ، تعدد الأشكال البارامتري | ج | ρ (*)(α1,α2,...,αn) | int(*compose(int(*f)(int),int(*g)(int)))(int); |
| C++11 | ليس فريدًا.
| function<function<int(int)>(function<int(int)>,function<int(int)>)>compose; | |
عند النظر إلى توقيع النوع في مثال، على سبيل المثال C#، فإن نوع الدالة composeهو في الواقع .Func<Func<A,B>,Func<B,C>,Func<A,C>>
بسبب حذف النوع في C++11 std::function، أصبح من الشائع استخدام القوالب لمعاملات الدوال ذات الرتبة الأعلى واستنتاج النوع ( auto) للإغلاقات .
الدلالات الدلالية
لا يتطابق نوع الدالة في لغات البرمجة مع فضاء جميع الدوال في نظرية المجموعات. فإذا اعتبرنا الأعداد الطبيعية مجالًا ، والقيم المنطقية مدىً، فإن عدد الدوال في نظرية المجموعات بينهما لا يُحصى (2 ℵ 0 = c ). من الواضح أن فضاء الدوال هذا أكبر من عدد الدوال التي يمكن تعريفها في أي لغة برمجة، إذ لا يوجد سوى عدد محدود من البرامج (البرنامج عبارة عن سلسلة منتهية من عدد محدود من الرموز)، وإحدى الدوال في نظرية المجموعات تحل مشكلة التوقف بشكل فعال .
يهتم علم الدلالة التفسيرية بإيجاد نماذج أكثر ملاءمة (تُسمى المجالات ) لنمذجة مفاهيم لغات البرمجة، مثل أنواع الدوال. ويتضح أن حصر التعبير في مجموعة الدوال القابلة للحساب غير كافٍ حتى لو كانت لغة البرمجة تسمح بكتابة عمليات حسابية غير منتهية (كما هو الحال إذا كانت لغة البرمجة كاملة تورينج ). يجب حصر التعبير في ما يُسمى بالدوال المتصلة (المقابلة للاتصال في طوبولوجيا سكوت ، وليس للاتصال بالمعنى التحليلي الحقيقي). وحتى مع ذلك، فإن مجموعة الدوال المتصلة تحتوي على دالة "أو" المتوازية ، التي لا يمكن تعريفها بشكل صحيح في جميع لغات البرمجة.
انظر أيضاً
- فئة مغلقة ديكارتية
- الكاري
- الكائن الأسي ، المكافئ في نظرية الفئات
- وظيفة من الدرجة الأولى
- فضاء الدوال ، المكافئ النظري للمجموعات
مراجع
- بيرس، بنجامين سي. (2002). أنواع لغات البرمجة . مطبعة معهد ماساتشوستس للتكنولوجيا. الصفحات 99-100 . ISBN 9780262162098.
- ميتشل، جون سي. أسس لغات البرمجة . مطبعة معهد ماساتشوستس للتكنولوجيا.
- نوع الوظيفة في مختبر n
- نظرية نوع التماثل: الأسس الأحادية للرياضيات ، برنامج الأسس الأحادية، معهد الدراسات المتقدمة . انظر القسم 1.2 .
- أنواع البيانات
- البرامج الفرعية
- نظرية الأنواع
