نوع البيانات الجبرية المعممة
في البرمجة الوظيفية ، يعتبر نوع البيانات الجبرية المعمم ( GADT ، وهو أيضًا نوع الشبح من الدرجة الأولى ، [ 1 ] نوع البيانات المتكرر المحمي ، [ 2 ] أو النوع المؤهل للمساواة [ 3 ] ) تعميمًا لنوع البيانات الجبرية البارامترية (ADT).
ملخص
في نوع البيانات المجردة المعممة (GADT)، يمكن لمنشئات المنتج (التي تُسمى منشئات البيانات في لغة هاسكل ) توفير تجسيد صريح لنوع البيانات المجردة (ADT) كتجسيد لنوع القيمة المُعادة. يتيح ذلك تعريف دوال ذات سلوك نوعي أكثر تقدماً. بالنسبة لمنشئ البيانات في هاسكل 2010، فإن القيمة المُعادة تحمل تجسيد النوع المُضمن في تجسيد معلمات نوع البيانات المجردة عند تطبيق المنشئ.
-- نوع بيانات تجريدي معياري ليس نوع بيانات تجريدي معمّم (GADT) قائمة البيانات a = Nil | Cons a ( قائمة البيانات a )integers :: List Int integers = Cons 12 ( Cons 107 Nil )strings :: List String strings = Cons "boat" ( Cons "dock" Nil )-- تعبير بيانات GADT حيث EBool :: Bool -> Expr Bool EInt :: Int -> Expr Int EEqual :: Expr Int -> Expr Int -> Expr Booleval :: Expr a -> a eval e = case e of EBool a -> a EInt a -> a EEqual a b -> ( eval a ) == ( eval b )expr1 :: Expr Bool expr1 = EEqual ( EInt 2 ) ( EInt 3 )ret = eval expr1 -- خطأيتم تطبيقها حاليًا في مُصرّف غلاسكو هاسكل (GHC) كامتداد غير قياسي، وتستخدمها، من بين أمور أخرى، Pugs و Darcs . يدعم OCaml GADT بشكل أصلي منذ الإصدار 4.00. [ 4 ]
يوفر تطبيق GHC الدعم لمعلمات النوع الكمية الوجودية وللقيود المحلية.
تاريخ
تم وصف نسخة مبكرة من أنواع البيانات الجبرية المعممة بواسطة Augustsson & Petersson (1994) واستندت إلى مطابقة الأنماط في ALF .
تم تقديم أنواع البيانات الجبرية المعممة بشكل مستقل من قبل تشيني وهينز (2003) ، وقبل ذلك من قبل شي، تشين وتشين (2003) كامتدادات لأنواع البيانات الجبرية في لغتي ML وهاسكل . [ 5 ] وهما متكافئان جوهريًا. وهما مشابهان لعائلات أنواع البيانات الاستقرائية (أو أنواع البيانات الاستقرائية ) الموجودة في حساب التفاضل والتكامل للإنشاءات الاستقرائية لروك ولغات أخرى ذات أنواع تابعة، باستثناء الأنواع التابعة، مع وجود قيد إضافي على الإيجابية في الأخيرة، وهو قيد غير مفروض في أنواع البيانات الجبرية المعممة. [ 6 ]
قدم سولزمان، وازني وستوكي (2006) أنواع البيانات الجبرية الموسعة التي تجمع بين أنواع البيانات الجبرية المعممة وأنواع البيانات الوجودية وقيود فئة النوع .
يُعد استنتاج النوع في غياب أي تعليق نوعي مُقدم من المبرمج غير قابل للتقرير [ 7 ] ، ولا تقبل الدوال المُعرّفة على أنواع البيانات الجبرية المعممة (GADTs) أنواعًا رئيسية بشكل عام. [ 8 ] يتطلب إعادة بناء النوع العديد من المفاضلات التصميمية، وهو مجال بحث نشط ( بيتون جونز، واشبورن ، وويريتش 2004 ؛ بيتون جونز وآخرون 2006 ).
في ربيع عام 2021، تم إصدار Scala 3.0. [ 9 ] وقد أتاح هذا التحديث الرئيسي لـ Scala إمكانية كتابة أنواع البيانات الجبرية المعممة [ 10 ] بنفس صيغة أنواع البيانات الجبرية، وهو ما لا يتوفر في لغات البرمجة الأخرى وفقًا لمارتن أوديرسكي . [ 11 ]
التطبيقات
تشمل تطبيقات GADTs البرمجة العامة ، ونمذجة لغات البرمجة ( بناء الجملة المجرد عالي المستوى )، والحفاظ على الثوابت في هياكل البيانات ، والتعبير عن القيود في لغات المجال المضمنة ، ونمذجة الكائنات. [ 12 ]
بناء الجملة المجرد من الدرجة العليا
من أهم تطبيقات GADTs تضمين بناء الجملة المجردة من الرتبة العليا بطريقة آمنة من حيث النوع . فيما يلي مثال على تضمين حساب لامدا ذي النوع البسيط مع مجموعة عشوائية من الأنواع الأساسية، وأنواع الضرب ( الصفوف )، ومُركِّب النقطة الثابتة :
بيانات Lam :: * -> * حيث Lift :: a -> Lam a -- ^ القيمة المرفوعة Pair :: Lam a -> Lam b -> Lam ( a , b ) -- ^ المنتج Lam :: ( Lam a -> Lam b ) -> Lam ( a -> b ) -- ^ تجريد lambda App :: Lam ( a -> b ) -> Lam a -> Lam b -- ^ تطبيق الدالة Fix :: Lam ( a -> a ) -> Lam a -- ^ النقطة الثابتةودالة تقييم آمنة من حيث النوع:
eval :: Lam t -> t eval ( Lift v ) = v eval ( Pair l r ) = ( eval l , eval r ) eval ( Lam f ) = \ x -> eval ( f ( Lift x )) eval ( App f x ) = ( eval f ) ( eval x ) eval ( Fix f ) = ( eval f ) ( eval ( Fix f ))يمكن الآن كتابة دالة المضروب على النحو التالي:
fact = Fix ( Lam ( \ f -> Lam ( \ y -> Lift ( if eval y == 0 then 1 else eval y * ( eval f ) ( eval y - 1 ))))) eval ( fact )( 10 )كانت ستحدث مشاكل عند استخدام أنواع البيانات الجبرية العادية. فإسقاط مُعامل النوع كان سيجعل الأنواع الأساسية المرفوعة مُكمّمة وجوديًا، مما يجعل كتابة المُقيِّم مستحيلة. ومع وجود مُعامل النوع، يظل الأمر مُقتصرًا على نوع أساسي واحد. علاوة على ذلك، App (Lam (\x -> Lam (\y -> App x y))) (Lift True)كان من الممكن إنشاء تعبيرات غير صحيحة مثل ، بينما هي غير صحيحة النوع باستخدام GADT. والمثال الصحيح هو App (Lam (\x -> Lam (\y -> App x y))) (Lift (\z -> True)). وذلك لأن نوع xهو Lam (a -> b)، مُستنتج من نوع Lamمُنشئ البيانات.
انظر أيضاً
ملحوظات
- ↑ تشيني وهينز 2003 .
- ^ شي وتشن وتشن 2003 .
- ↑ شيرد وباساليك 2004 .
- ↑ "OCaml 4.00.1" . ocaml.org .
- ^ تشيني وهينزي 2003 ، ص. 25.
- ^ تشيني وهينزي 2003 ، ص 25-26.
- ^ بيتون جونز، واشبورن وويريش 2004 ، ص. 7.
- ^ شريفيرس وآخرون. 2009 ، ص. 1.
- ↑ كميتيوك، أناتولي. "سكالا 3 هنا!" . سكالا-lang.org . المدرسة الفيدرالية للفنون التطبيقية لوزان (EPFL) لوزان، سويسرا . تم الاسترجاع في 19 مايو 2021 .
- ^ “سكالا 3 – كتاب أنواع البيانات الجبرية” . سكالا-lang.org . المدرسة الفيدرالية للفنون التطبيقية لوزان (EPFL) لوزان، سويسرا . تم الاسترجاع في 19 مايو 2021 .
- ↑ أوديرسكي، مارتن. "جولة في سكالا 3 - مارتن أوديرسكي" . youtube.com . مؤتمرات أيام سكالا. مؤرشف من الأصل بتاريخ 19 ديسمبر 2021. تم الاطلاع عليه بتاريخ 19 مايو 2021 .
- ^ بيتون جونز، واشبورن وويريش 2004 ، ص. 3.
للمزيد من القراءة
- التطبيقات
- الأماكن القريبة : بيترسون، كينت (سبتمبر 1994). “العائلات السخيفة” (PDF) .
- تشيني، جيمس ؛ هينز، رالف (2003). "أنواع الأشباح من الدرجة الأولى". تقرير فني CUCIS TR2003-1901 . جامعة كورنيل. hdl : 1813/5614 .
- شي، هونغوي ؛ تشين، تشيان ؛ تشين، غانغ (2003). "منشئات أنواع البيانات التكرارية المحمية". وقائع الندوة الثلاثين لجمعية ACM SIGPLAN-SIGACT حول مبادئ لغات البرمجة . مطبعة ACM. الصفحات 224-235 . CiteSeerX 10.1.1.59.4622 . doi : 10.1145/604131.604150 . ISBN 978-1581136289. S2CID 15095297 .
- شيرد، تيم ؛ باساليتش، أمير (2004). "البرمجة الوصفية مع المساواة المدمجة في الأنواع" . وقائع ورشة العمل الدولية الرابعة حول الأطر المنطقية واللغات الوصفية (LFM'04)، كورك . 199 : 49-65 . doi : 10.1016/j.entcs.2007.11.012 .
- علم الدلالة
- باتريشيا يوهان ونيل غاني (2008). " أسس البرمجة الهيكلية باستخدام GADTs ".
- آري ميدلكوب، أتزي ديجكسترا، وس. دويتس سويرسترا (2011). " مواصفات مبسطة لأنواع البيانات الجبرية المعممة: النظام F مع براهين المساواة من الدرجة الأولى ". الحوسبة الرمزية والحسابية من الرتبة العليا .
- إعادة بناء النوع
- بيتون جونز، سيمون ؛ واشبورن، جيفري ؛ ويريتش، ستيفاني (2004). "الأنواع المتذبذبة: استنتاج النوع لأنواع البيانات الجبرية المعممة" (ملف PDF) . تقرير فني MS-CIS-05-25 . جامعة بنسلفانيا.
- بيتون جونز، سيمون ؛ فيتينيوتيس، ديميتريوس ؛ ويريش، ستيفاني ؛ واشبورن، جيفري (2006). "استدلال بسيط للأنواع قائم على التوحيد لأنواع البيانات الجبرية المعممة" (ملف PDF) . وقائع المؤتمر الدولي لجمعية الحوسبة الآلية حول البرمجة الوظيفية (ICFP'06)، بورتلاند .
- سولزمان، مارتن ؛ وازني، جيريمي ؛ ستوكي، بيتر جيه. (2006). "إطار عمل لأنواع البيانات الجبرية الموسعة". في: هاجيا، م.؛ وادلر، ب. (محرران). المؤتمر الدولي الثامن حول البرمجة الوظيفية والمنطقية (FLOPS 2006) . سلسلة محاضرات في علوم الحاسوب . المجلد 3945. الصفحات 46-64 .
- سولزمان، مارتن ؛ شريفرز، توم ؛ ستوكي، بيتر جيه. (2006). "استدلال النوع الرئيسي لفئات الأنواع متعددة المعاملات على نمط GHC". في كوباياشي، ناوكي (محرر). لغات البرمجة والأنظمة: الندوة الآسيوية الرابعة (APLAS 2006) . سلسلة محاضرات في علوم الحاسوب. المجلد 4279. الصفحات 26-43 .
- شريفرز، توم ؛ بيتون جونز، سيمون ؛ سولزمان، مارتن ؛ فيتينيوتيس، ديميتريوس (2009). "استدلال نوعي كامل وقابل للتقرير لأنواع البيانات الجبرية المعممة" (ملف PDF) . وقائع المؤتمر الدولي الرابع عشر لجمعية ACM SIGPLAN حول البرمجة الوظيفية . الصفحات 341-352 . doi : 10.1145/1596550.1596599 . ISBN 9781605583327. S2CID 11272015 .
- لين، تشوان كاي (2010). الاستدلال العملي على أنواع البيانات لنظام GADT (ملف PDF) (أطروحة دكتوراه). جامعة ولاية بورتلاند. مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 11 يونيو 2016. تاريخ الاطلاع: 8 أغسطس 2011 .
- آخر
- أندرو كينيدي وكلاوديو ف. روسو. " أنواع البيانات الجبرية المعممة والبرمجة كائنية التوجه ". في وقائع المؤتمر السنوي العشرين لجمعية ACM SIGPLAN حول البرمجة كائنية التوجه والأنظمة واللغات والتطبيقات . مطبعة ACM، 2005.
روابط خارجية
- صفحة أنواع البيانات الجبرية المعممة على ويكي هاسكل
- أنواع البيانات الجبرية المعممة في دليل مستخدمي GHC
- أنواع البيانات الجبرية المعممة والبرمجة كائنية التوجه
- GADTs – Haskell Prime – Trac مؤرشف بتاريخ 2019-04-04 في Wayback Machine
- أوراق بحثية حول استنتاج الأنواع لأنواع البيانات الجبرية المعممة ، قائمة المراجع بقلم سيمون بيتون جونز
- الاستدلال على الأنواع مع القيود ، قائمة المراجع بقلم سيمون بيتون جونز
- محاكاة أنواع البيانات الجبرية المعممة (GADTs) في جافا باستخدام مبرهنة يونيدا
- البرمجة الوظيفية
- البرمجة المعتمدة على النوع
- نظرية الأنواع
- أنواع البيانات المركبة
- أنواع البيانات
