Unlambda
Unlambda هي لغة برمجة وظيفية بسيطة، "شبه نقية " [ 1 ] ، ابتكرها ديفيد مادور. تعتمد على المنطق التوافقي ، ونظام تعبيرات بدون عامل لامدا أو متغيرات حرة. وتعتمد بشكل أساسي على دالتين مدمجتين ( و ) وعامل تطبيق (يُكتب ، وهو رمز علامة الاقتباس المائلة ). هذه العناصر وحدها تجعلها كاملة تورينج ، ولكن هناك أيضًا بعض دوال الإدخال/الإخراج لتمكين التفاعل مع المستخدم، وبعض دوال الاختصارات، ودالة تقييم كسول . المتغيرات غير مدعومة.sk`
Unlambda هو برنامج مجاني ومفتوح المصدر يتم توزيعه بموجب رخصة جنو العمومية العامة (GPL) 2.0 أو أحدث.
المبادئ الأساسية
تُعتبر لغة Unlambda لغة برمجة متخصصة ، وهي مصممة لعرض البرمجة الوظيفية النقية أكثر من كونها لغة عملية. تتمثل ميزتها الرئيسية في غياب المعاملات وأنواع البيانات التقليدية ، حيث أن نوع البيانات الوحيد في البرنامج هو الدوال ذات المعامل الواحد. ومع ذلك، يمكن محاكاة البيانات باستخدام دوال مناسبة كما هو الحال في حساب لامدا . ويمكن تمثيل الدوال متعددة المعاملات باستخدام أسلوب التخصيص الجزئي (Currying) .
تعتمد لغة Unlambda على مبدأ إزالة التجريد ، أو إزالة جميع المتغيرات المحفوظة، بما في ذلك الدوال. وباعتبارها لغة وظيفية بحتة، فإن دوال Unlambda هي كائنات من الدرجة الأولى ، وهي الكائنات الوحيدة من هذا النوع.
فيما يلي تطبيق لبرنامج "مرحباً بالعالم" في Unlambda: [ 1 ]
`r```````````.Hello .worldi
وظائف مدمجة أصلية
يشير هذا الرمز إلى دالة تأخذ وسيطًا واحدًا وتعيده دون تغيير، وتطبع الحرف x كأثر جانبي عند استدعائها. يُمثل هذا الرمز نسخة من دالة الهوية التي لا تُحدث هذا الأثر الجانبي؛ ويُستخدم هنا كوسيط وهمي. يُطبق البرنامج دالة الطباعة على وسيط وهمي ، ويعيد الحرف x كأثر جانبي. وبالمثل، تُطبق الدالة أولًا على الوسيط x ، فتطبع الحرف x وتعيد x ؛ ثم تُطبق نتيجة هذه الدالة على الوسيط x كما في المثال السابق. تُعد هذه الدالة اختصارًا لدالة طباعة سطر جديد..xi`.didiid``.l.di.l.dl.d.dir
من بين الميزات المهمة الأخرى التي توفرها Unlambda، الدالتان ` kand` sو`. kتُنشئ `and` دوالًا ثابتة: نتيجة ` and` هي دالة، عند استدعائها، تُرجع x . وبالتالي، فإن قيمة `and` هي x لأي قيمتين x و y .`kx``kxy
sهي دالة تقييم معممة. تُقيّم إلى قيمة لأي قيم x و y و z . ومن اللافت للنظر أن و كافيتان لإجراء أي عملية حسابية، كما هو موضح في حساب التوافيق SKI . كمثال موجز، يمكن تنفيذ دالة التطابق على النحو التالي: ، لأن تُعطي قيمة x لجميع قيم x .```sxyz``xz`yzski``skk```skkx
إحدى بنيات التحكم في تدفق Unlambda هي استدعاء الدالة مع استمرارها الحالي ، ويُرمز لها بـ ` concontinuation`. عند تقييم cتعبير من هذا الشكل ، يتم إنشاء كائن استمرار خاص يُمثل حالة المُفسِّر في تلك اللحظة. ثم يتم تقييم x ، وبعد ذلك تُمرَّر النتيجة إلى كائن الاستمرار كوسيط. إذا لم يُطبَّق الاستمرار على أي وسيط، فإن قيمة التعبير هي نفسها قيمة x . أما إذا طُبِّق كائن الاستمرار على القيمة y ، فسيتم إيقاف تنفيذ x فورًا، وستكون قيمة التعبير بأكمله هي y .`cx`cx`cx
تعتمد دلالات تنفيذ دالة Unlambda عادةً على التقييم الفوري ، ولكن يوجد خيار التقييم المؤجل ، والذي يُشار إليه باستخدام المعامل `--` d. عادةً، لتقييم تعبير من الشكل `x = x - y = y` ، تُقيّم Unlambda أولًا x ، ثم y ، ثم تُطبّق x على y . مع ذلك، إذا كانت قيمة x هي القيمة الخاصة `x = x - y = y` ، فلن يتم تقييم y ؛ بدلًا من ذلك، تكون قيمة التعبير كائنًا خاصًا يُسمى "الحساب المؤجل"، والذي عند تطبيقه على وسيط z ، يُقيّم y ، ثم يُطبّق قيمته على z . في حال عدم وجود آثار جانبية، يكون هذا مطابقًا تمامًا لـ `x = x - y` . الفرق هو أن `x = x - y` يُنفّذ أي آثار جانبية في y فورًا، بينما `x = x - y` يُؤجل الآثار الجانبية حتى يتم تطبيق النتيجة على وسيط آخر.`xyd`dy`iy`iy`dy
المعامل المدمج التالي في Unlambda هو v، والذي يتجاهل وسيطه ويعيد v. هذه الميزة ليست ضرورية تمامًا، إذ vيمكن تنفيذ كـ ``s`k``s``s`kskk`k``s``s`kskk، ولكنها مُقدمة للتسهيل. (التعبير أعلاه هو ببساطة `Yk، حيث Yيرمز إلى مُركِّب النقطة الثابتة .)
الوظائف المدمجة في الإصدار 2
أُضيفت المزيد من الدوال المدمجة في الإصدار الثاني من Unlambda. يُسهّل إدخال البيانات@ باستخدام المعاملات ` and` و` . عند تطبيق `and` على دالة ` x` ، تُقرأ قيمة حرف من المدخلات وتُخزّن كـ "الحرف الحالي"؛ ثم تُطبّق `x` على `and` . مع ذلك، إذا لم تكن هناك أحرف أخرى متاحة في المدخلات، يُترك الحرف الحالي غير مُعرّف، وتُطبّق ` x` على `and` بدلاً منه. عند تطبيق دالة `and` على دالة `x` ، تكون النتيجة هي تقييم `and` إذا كان الحرف الحالي هو `u` ، وإلا يتم تقييم `and`.?u@iv?u`xi`xv
يوجد أيضًا عامل "إعادة الطباعة" |. عند تقييمه، يتم تطبيق الدالة x على إذا كان u هو الحرف الحالي، أو على إذا لم يكن هناك حرف حالي.`|x.uv
وأخيرًا، هناك عامل الخروج e. عند eتطبيقه على x ، يتم إنهاء تنفيذ البرنامج، ويتم اعتبار x نتيجة البرنامج (معظم المفسرات الموجودة حاليًا تتجاهل النتيجة على أي حال).
انظر أيضاً
مراجع
- 1 2 تشو-كارول، مارك سي. (11 أغسطس 2006). "برمجة الجمعة المرضية: Unlambda، أو البرمجة بدون متغيرات" . الرياضيات الجيدة، الرياضيات السيئة (مدونة) . ScienceBlogs.
- فيليكس هيرنانديز كامبوس (1 أبريل 2002)، المحاضرة 28: المزيد حول البرمجة الوظيفية ، جامعة نورث كارولينا، COMP144
- 原 悠 (يوتاكا هارا) (2008). روبي で作る奇妙なプログラミング言語(باللغة اليابانية). توكيو: ماينيتشكوميونيكيشونزو. ص 205 – 214. ISBN 978-4-8399-2784-4.
{{cite book}}: CS1 maint: publisher location ( link )
روابط خارجية
- لغات البرمجة الباطنية
- اللغات الوظيفية
