EuLisp
EuLisp هي لهجة من لغة Lisp ذات نطاق ثابت وديناميكي، طُوِّرت بواسطة مجموعة غير رسمية من مستخدمي ومطوري Lisp من القطاعين الصناعي والأكاديمي في جميع أنحاء أوروبا. كان هدف واضعي المعايير هو ابتكار لغة Lisp جديدة "أقل تأثراً بالماضي" (مقارنةً بلغة Common Lisp )، وأقل بساطةً من لغة Scheme . كما كان من أهدافهم دمج نموذج البرمجة الكائنية التوجه بشكل فعّال. وهي لغة برمجة من الجيل الثالث .
أصل
بدأت عملية تعريف اللغة لأول مرة في اجتماع عُقد في باريس عام 1985 واستغرقت عدة سنوات. وتم توفير المواصفات الكاملة والتطبيق الأولي ( المفسر فقط) في عام 1990.
| 1958 | 1960 | 1965 | 1970 | 1975 | 1980 | 1985 | 1990 | 1995 | 2000 | 2005 | 2010 | 2015 | 2020 | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| LISP 1، 1.5، LISP 2 (مهجورة) | |||||||||||||||
| ماكليس | |||||||||||||||
| تداخل | |||||||||||||||
| MDL | |||||||||||||||
| آلة التأتأة | |||||||||||||||
| مخطط | R5RS | R6RS | R7RS صغير | ||||||||||||
| لا شيء | |||||||||||||||
| ZIL (لغة تنفيذ Zork) | |||||||||||||||
| فرانز ليسب | |||||||||||||||
| muLisp | |||||||||||||||
| لغة الشفرة الشائعة | معيار ANSI | ||||||||||||||
| لي لِسْب | |||||||||||||||
| مخطط معهد ماساتشوستس للتكنولوجيا | |||||||||||||||
| XLISP | |||||||||||||||
| تي | |||||||||||||||
| شيز سكيم | |||||||||||||||
| إيماكس ليسب | |||||||||||||||
| أوتو ليسب | |||||||||||||||
| PicoLi sp | |||||||||||||||
| غامبيت | |||||||||||||||
| EuLisp | |||||||||||||||
| لغة ISLISP | |||||||||||||||
| أوبن ليسب | |||||||||||||||
| مخطط PLT | مضرب | ||||||||||||||
| لغة نيو ليسب | |||||||||||||||
| جنو غايل | |||||||||||||||
| لغة ليسب المرئية | |||||||||||||||
| كلوجر | |||||||||||||||
| قوس | |||||||||||||||
| LFE | |||||||||||||||
| هي | |||||||||||||||
السمات المميزة
تتميز لغة Lisp-1 بكونها لغة Lisp-1 (بدون مساحات أسماء منفصلة للدوال والمتغيرات)، ونظام كائني التوجه من نوع الدوال العامة على غرار نظام كائنات Common Lisp (CLOS) يُسمى نظام كائنات EuLisp (TELOS) مُدمج من الصفر، ونظام وحدات مُدمج، وهي مُعرّفة على شكل طبقات لتسهيل استخدام Lisp على الأجهزة الصغيرة والمدمجة والآلات التعليمية. تدعم لغة Lisp الاستمرارية ، وإن لم تكن بنفس قوة Scheme . كما أنها تتميز بآلية معالجة بسيطة وخفيفة ( خيوط ).
ملخص
- تعريف بالمستويات، حاليًا المستوى 0 والمستوى 1
- وحدات مبنية على بيئات معجمية (غير من الدرجة الأولى ) .
- محدد النطاق المعجمي ، مع إمكانية الربط الديناميكي أو المتأخر في المستوى 1.
- مساحة اسم واحدة لأسماء الدوال والمتغيرات (مثل Scheme ).
- عمليات خفيفة الوزن.
- نظام كائنات متكامل تمامًا مع وراثة فردية في المستوى 0 ووراثة متعددة وبروتوكول الكائنات الوصفية في المستوى 1.
- نظام شرطي موجه للكائنات .
التطبيقات
كانت إحدى التطبيقات المبكرة للغة EuLisp هي Free and Finally Eulisp (FEEL). وخلفها Youtoo ( بنسختيه المفسرة والمترجمة )، من تطوير جامعة باث في المملكة المتحدة . [ 3 ] وقد كتب راسل برادفورد مترجمًا للمستوى الأساسي من EuLisp، وهو المستوى 0 ، بلغة XScheme، وهي تطبيق للغة Scheme من تطوير ديفيد مايكل بيتز، وكان يُطلق عليه في الأصل اسم EuScheme ، ولكن أُعيد تسمية أحدث إصدار منه إلى EuXLisp.لتجنب الالتباس. وأيضًا Eu2Cتم إنشاء مترجم EuLisp المحسن بواسطة معهد فراونهوفر لعلوم وتكنولوجيا الأنظمة (ISST) ضمن مشروع APPLY في ألمانيا..
تم تطوير لهجة من لغة EuLisp، أطلق عليها اسم Plural EuLisp. كانت عبارة عن EuLisp مع ملحقات برمجة الحوسبة المتوازية .
مثال
مثال على استخدام الفئات في الخوارزمية لحل مشكلة " أبراج هانوي ".
( defmodule hanoi ( syntax ( syntax-0 ) import ( level-0 ) export ( hanoi ));;;------------------------------------------------- ;;; تعريف البرج ;;;------------------------------------------------- ( defconstant *max-tower-height* 10 )( defclass <tower> () (( id reader: tower-id keyword: id: ) ( blocks accessor: tower-blocks )))( defun build-tower ( x n ) ( labels (( loop ( i res ) ( if ( = i 0 ) res ( loop ( - i 1 ) ( cons i res ))))) (( setter tower-blocks ) x ( loop n ())) x ))( defmethod generic-print (( x <tower> ) ( s <stream> )) ( sformat s "#<tower ~a: ~a>" ( tower-id x ) ( tower-blocks x )));;;------------------------------------------------- ;;; الوصول إلى الأبراج السكنية ;;;------------------------------------------------- ( defgeneric push ( x y ))( defmethod push (( x <tower> ) ( y <fpi> )) ( let (( blocks ( tower-blocks x ))) ( if ( or ( null? blocks ) ( < y ( car blocks ))) (( setter tower-blocks ) x ( cons y blocks )) ( error <condition> ( fmt "لا يمكن دفع كتلة بحجم ~a على البرج ~a" y x )))))( defgeneric pop ( x ))( defmethod pop (( x <tower> )) ( let (( blocks ( tower-blocks x ))) ( if blocks ( progn (( setter tower-blocks ) x ( cdr blocks )) ( car blocks )) ( error <condition> ( fmt "لا يمكن إزالة كتلة من برج فارغ ~a" x )))));;;------------------------------------------------- ;;; انقل n من الكتل من البرج x1 إلى البرج x2 باستخدام x3 كمنطقة عازلة ;;;------------------------------------------------- ( defgeneric move ( n x1 x2 x3 ))( defmethod move (( n <fpi> ) ( x1 <tower> ) ( x2 <tower> ) ( x3 <tower> )) ( if ( = n 1 ) ( progn ( push x2 ( pop x1 )) ( print x1 nl x2 nl x3 nl nl )) ( progn ( move ( - n 1 ) x1 x3 x2 ) ( move 1 x1 x2 x3 ) ( move ( - n 1 ) x3 x2 x1 ))));;;------------------------------------------------- ;;; تهيئة وتشغيل "أبراج هانوي" ;;;------------------------------------------------- ( defun hanoi () ( let (( x1 ( make <tower> id: 0 )) ( x2 ( make <tower> id: 1 )) ( x3 ( make <tower> id: 2 ))) ( build-tower x1 *max-tower-height* ) ( build-tower x2 0 ) ( build-tower x3 0 ) ( print x1 nl x2 nl x3 nl nl ) ( move *max-tower-height* x1 x2 x3 )))( هانوي );;;------------------------------------------------- ) ;; نهاية وحدة هانوي ;;;-------------------------------------------------مراجع
- ↑ "Eulisp" (ملف PDF) . GitHub . مؤرشف من النسخة الأصلية (PDF) بتاريخ 2012-03-06 . تم الاطلاع عليه بتاريخ 2017-09-20 .
- 1 2 3 "Eulisp" . GitHub .
- ↑ كايند، أندرياس. "أنت أيضاً" . كلية العلوم الرياضية. جامعة باث . إنجلترا . تم الاسترجاع في 28-10-2018 .
- "نظرة عامة على EuLisp" ، جوليان بادجيت، جريج نويينز، وهاري بريتهاور، المحررون. LISP والحساب الرمزي ، المجلد 6، العدد 1-2، 1993، الصفحات 9-98.
- "موازنة بروتوكول الكائن الفوقي في EuLisp" ، هاري بريتهاور، يورغن كوب، هارلي ديفيس، وكيث بلايفورد. LISP والحساب الرمزي ، المجلد 6، العدد 1-2، أغسطس 1993، الصفحات 119-138.
- "EuLisp في التعليم" ، بقلم ر. برادفورد ودي سي دي رور. LISP والحوسبة الرمزية ، المجلد 6، العدد 1-2، الصفحات 99-118.
- "تطبيقات Telos" ، بيتر برودبري، كريستوفر بوردورف. LISP والحساب الرمزي ، المجلد 6، العدد 1-2، أغسطس 1993، الصفحات 139-158.
- "نهج عملي لاستنتاج الأنواع في لغة EuLisp" ، أندرياس كيند وهورست فريدريش. LISP والحساب الرمزي ، المجلد 6، العدد 1-2، أغسطس 1993، الصفحات 159-176.
- "خيوط EuLisp: مجموعة أدوات التزامن" ، نيل بيرينغتون، بيتر برودبري، ديفيد ديرور، وجوليان بادجيت. LISP والحساب الرمزي ، المجلد 6، العدد 1-2، أغسطس 1993، الصفحات 177-200.
- "Plural EuLisp: A Primitive Symbolic Data Parallel Model" ، سيمون ميرال، جوليان بادجيت. LISP and Symbolic Computation ، المجلد 6، العدد 1-2، أغسطس 1993، الصفحات 201-219.
- "جامع قمامة محافظ لمترجم EuLisp إلى ASM/C" ، إي. أولريش كريجل. ورشة عمل OOPSLA'93 حول جمع القمامة وإدارة الذاكرة ، واشنطن العاصمة، 27 سبتمبر 1993.
- "تنفيذ Telos في Common Lisp" مؤرشف في 2006-02-14 في Wayback Machine ، أنظمة موجهة للكائنات ، المجلد 3، الصفحات 31-49، 1996. ISSN 0969-9767.
روابط خارجية
- الأسئلة الشائعة والروابط المتعلقة بـ EuLisp
- الإصدار 0.99 من المواصفات النهائية لعام 1993 – ( ملف PDF )
- الإصدار 0.991 مؤرشف بتاريخ 2012-03-06 في Wayback Machine، تعريف مسودة محدثة غير رسمية (2010) – ( PDF )
- مصادر EuScheme
- EuLisp على GitHub ، أحدث الإصدارات من: EuLisp (مع دعم 64 بت والمزيد)، EuXLisp، Eu2C
- لغات البرمجة ذات الكتابة الديناميكية
- اللغات الوظيفية
- عائلة لغات البرمجة ليسب
- لغات البرمجة متعددة الأنماط
