EuLisp

EuLisp هي لهجة من لغة Lisp ذات نطاق ثابت وديناميكي، طُوِّرت بواسطة مجموعة غير رسمية من مستخدمي ومطوري Lisp من القطاعين الصناعي والأكاديمي في جميع أنحاء أوروبا. كان هدف واضعي المعايير هو ابتكار لغة Lisp جديدة "أقل تأثراً بالماضي" (مقارنةً بلغة Common Lisp )، وأقل بساطةً من لغة Scheme . كما كان من أهدافهم دمج نموذج البرمجة الكائنية التوجه بشكل فعّال. وهي لغة برمجة من الجيل الثالث .

أصل

بدأت عملية تعريف اللغة لأول مرة في اجتماع عُقد في باريس عام 1985 واستغرقت عدة سنوات. وتم توفير المواصفات الكاملة والتطبيق الأولي ( المفسر فقط) في عام 1990.

19581960196519701975198019851990199520002005201020152020
 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 . كما أنها تتميز بآلية معالجة بسيطة وخفيفة ( خيوط ).

ملخص

التطبيقات

كانت إحدى التطبيقات المبكرة للغة 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 )))( هانوي );;;------------------------------------------------- ) ;; نهاية وحدة هانوي ;;;-------------------------------------------------

مراجع

  1. "Eulisp" (ملف PDF) . GitHub . مؤرشف من النسخة الأصلية (PDF) بتاريخ 2012-03-06 . تم الاطلاع عليه بتاريخ 2017-09-20 .
  2. 1 2 3 "Eulisp" . GitHub .
  3. كايند، أندرياس. "أنت أيضاً" . كلية العلوم الرياضية. جامعة باث . إنجلترا . تم الاسترجاع في 28-10-2018 .