FP (لغة برمجة)
لغة البرمجة الوظيفية ( FP ) [ 2 ] هي لغة برمجة ابتكرها جون باكوس لدعم نموذج البرمجة الوظيفية [ 2 ] . تتيح هذه اللغة بناء البرامج باستخدام مجموعة من العناصر اللغوية الأساسية المفيدة عمومًا ، وتجنب استخدام المتغيرات المسماة (وهو أسلوب يُعرف أيضًا بالبرمجة الضمنية أو "البرمجة بدون نقاط"). وقد تأثرت بشكل كبير بلغة APL التي طورها كينيث إي. إيفرسون في أوائل الستينيات. [ 3 ]
طُرحت لغة البرمجة الوظيفية (FP) في ورقة باكوس البحثية التي فاز بها بجائزة تورينج عام 1977 ، بعنوان: "هل يمكن تحرير البرمجة من أسلوب فون نيومان؟: أسلوب وظيفي وجبر برامجه". أثارت هذه الورقة البحثية اهتمامًا بأبحاث البرمجة الوظيفية ، [ 4 ] مما أدى في النهاية إلى ظهور لغات البرمجة الوظيفية الحديثة، والتي تقوم في معظمها على نموذج حساب لامدا ، وليس على نموذج مستوى الدوال الذي كان باكوس يأمله. في ورقته البحثية التي فاز بها بجائزة تورينج، وصف باكوس كيف يختلف أسلوب البرمجة الوظيفية:
يعتمد نظام البرمجة الوظيفية على استخدام مجموعة ثابتة من الصيغ التركيبية تُسمى الصيغ الوظيفية. هذه الصيغ، بالإضافة إلى تعريفات بسيطة، هي الوسيلة الوحيدة لبناء دوال جديدة من دوال موجودة؛ فهي لا تستخدم متغيرات أو قواعد استبدال، وتُصبح عمليات جبرية مرتبطة بالبرامج. جميع دوال نظام البرمجة الوظيفية من نوع واحد: فهي تربط الكائنات ببعضها البعض وتأخذ دائمًا وسيطًا واحدًا. [ 2 ]
لم يُستخدم FP إلا قليلاً خارج الأوساط الأكاديمية. [ 5 ] في ثمانينيات القرن العشرين، ابتكر باكوس لغة لاحقة، وهي FL ، كمشروع داخلي في قسم الأبحاث في شركة IBM .
ملخص
القيم التي تربطها برامج البرمجة الوظيفية ببعضها البعض تشكل مجموعة مغلقة تحت تكوين التسلسل :
إذا كانت x1 ، ...، xn قيمًا ، فإن المتتالية〈x1 ، ... ، xn 〉 هي أيضًا قيمة
يمكن بناء هذه القيم من أي مجموعة من الذرات: القيم المنطقية، والأعداد الصحيحة، والأعداد الحقيقية، والأحرف، وما إلى ذلك:
منطقي : { صواب ، خطأ } عدد صحيح : {0، 1، 2، ...، ∞} حرف : {'a'، 'b'، 'c'، ...} رمز : { x ، y ، ...}⊥ هي القيمة غير المعرّفة ، أو الحد الأدنى . التسلسلات تحافظ على الحد الأدنى :
〈x 1 ,..., ⊥ ,..., x n〉 = ⊥
برامج FP هي دوال f تقوم كل منها بتحويل قيمة واحدة x إلى قيمة أخرى:
f : x تمثل القيمة الناتجة عن تطبيق الدالة f على القيمة x
تكون الدوال إما بدائية (أي يتم توفيرها مع بيئة البرمجة الوظيفية) أو يتم بناؤها من البدائيات عن طريق عمليات تشكيل البرنامج (وتسمى أيضًا الدوال الوظيفية ).
من أمثلة الدوال الأولية الدالة الثابتة ، التي تحول القيمة x إلى دالة ذات قيمة ثابتة x̄ . الدوال صارمة .
f : ⊥ = ⊥
مثال آخر على الدالة الأولية هو عائلة دوال الاختيار ، والتي يُرمز لها بـ 1 ، 2 ، ... حيث:
i :〈 x 1 ,..., x n〉 = x i إذا كان 1 ≤ i ≤ n = ⊥ خلاف ذلك
الوظائف
على عكس الدوال الأولية، تعمل الدوال الوظيفية على دوال أخرى. على سبيل المثال، بعض الدوال لها قيمة تساوي واحدًا ، مثل 0 للجمع و1 للضرب . تُنتج الوحدة الوظيفية مثل هذه القيمة عند تطبيقها على دالة f لها قيمة تساوي واحدًا.
وحدة + = 0 وحدة × = 1 وحدة fo = ⊥
هذه هي الوظائف الأساسية للبرمجة الوظيفية:
التركيب f ∘ g حيث f ∘ g : x = f :( g : x )
إنشاء [ f 1 ,..., f n ] حيث [ f 1 ,..., f n ]: x = 〈f 1 : x ,..., f n : x〉
الشرط ( h ⇒ f ; g ) حيث ( h ⇒ f ; g ): x = f : x إذا كان h : x = T = g : x إذا كان h : x = F = ⊥ خلاف ذلك
ينطبق على جميع α f حيث α f :〈x 1 ,..., x n〉 = 〈f : x 1 ,..., f : x n〉
أدخل على اليمين / f حيث / f :〈x〉 = x و / f :〈x 1 , x 2 ,..., x n〉 = f :〈x 1 ,/ f :〈x 2 ,..., x n〉〉 و / f :〈 〉 = وحدة f
أدخل من اليسار \ f حيث \ f :〈x〉 = x و \ f :〈x 1 , x 2 ,..., x n〉 = f :〈\ f :〈x 1 ,..., x n-1〉, x n〉 و \ f :〈 〉 = وحدة f
الدوال المعادلة
إضافة إلى إمكانية بناء الدالة من عناصر أولية بواسطة الدوال الوظيفية، يمكن تعريف الدالة بشكل تكراري بواسطة معادلة، وأبسط أنواعها هي:
f ≡ E f
حيث E f هو تعبير مبني من العناصر الأولية، والوظائف المعرفة الأخرى، ورمز الدالة f وحده، باستخدام الدوال الوظيفية.
FP84
FP84 هو امتداد للغة البرمجة الوظيفية (FP) ليشمل المتتاليات اللانهائية ، وأشكال الدمج التي يُعرّفها المبرمج (على غرار تلك التي أضافها باكوس إلى لغة FL ، التي خلفت FP)، والتقييم الكسول . على عكس FFP، وهي إحدى تنويعات باكوس الخاصة على FP، يُفرّق FP84 بوضوح بين الكائنات والدوال: أي أن الدوال لم تعد تُمثَّل بمتتاليات من الكائنات. تُتيح امتدادات FP84 إزالة قيد FP الذي كان يُلزم بتطبيق بناء المتتاليات على الكائنات غير العمودية (-⊥) فقط: في FP84، يُغلق نطاق بناء المتتاليات ليشمل جميع التعبيرات (بما في ذلك تلك التي تعني ⊥) .
تتجسد دلالات FP84 في جبر أساسي للبرامج، وهي مجموعة من المعادلات على مستوى الوظائف التي يمكن استخدامها لمعالجة البرامج والتحليل المنطقي لها.
مراجع
- ↑ مفهوم لغات البرمجة الوظيفية وتطورها وتطبيقها، مؤرشف بتاريخ 11 مارس 2016 في أرشيف الإنترنت (Wayback Machine)، بول هوداك، 1989
- 1 2 3 باكوس، جون (1 أغسطس 1978). "هل يمكن تحرير البرمجة من أسلوب فون نيومان؟: أسلوب وظيفي وجبر برامجه" . اتصالات رابطة آلات الحوسبة . 21 (8): 613-641 . doi : 10.1145/359576.359579 .
- ↑ "جائزة تورينج من جمعية آلات الحوسبة" (ملف PDF) .
- ↑ يانغ، جان (2017). "مقابلة مع سيمون بيتون جونز" . مجلة لغات البرمجة .
- ↑ هاج، جيمس (28 ديسمبر 2007). "علم آثار البرمجة الوظيفية" . البرمجة في القرن الحادي والعشرين .
- التضحية بالبساطة من أجل الراحة: أين ترسم الخط الفاصل؟، جون إتش. ويليامز وإدوارد إل. ويمرز، مركز أبحاث آي بي إم ألمادن، وقائع الندوة السنوية الخامسة عشرة لجمعية ACM SIGACT-SIGPLAN حول مبادئ لغات البرمجة، سان دييغو، كاليفورنيا، يناير 1988.
روابط خارجية
- مترجم لغة البرمجة FP مكتوب بلغة دلفي – لازاروس
- ديرك جيريتس: محاضرة جائزة تورينج (1977-1978) وما يليها ، في جون دبليو باكوس (المنشورات)
- FP84 مقابل FL: التضحية بالبساطة من أجل الراحة: أين ترسم الخط الفاصل؟ جيه إتش ويليام وإي إل ويمرز، 1988 (الصفحات 169-179)
- لغات البرمجة الأكاديمية
- لغات مستوى الوظائف
- لغات البرمجة التي تم إنشاؤها عام 1977
