Парадигма | мультипарадигма : функциональная , процедурная , мета , объектно-ориентированная |
---|---|
Семья | Лисп |
Впервые появился | 1990 |
Предварительный выпуск | 0,991 [1] / 2010 |
Печатная дисциплина | сильный , динамичный |
Операционные системы | Linux |
Расширения имени файла | .Эм |
Основные реализации | |
EuXLisp, [2] Youtoo, [2] Eu2C [2] | |
Под влиянием | |
Common Lisp , InterLisp , LeLisp , Lisp / VM, Scheme , T , CLOS , ObjVlisp , Oaklisp , MicroCeyx, MCS, Standard ML , Haskell | |
Под влиянием | |
Дилан , ISLISP , Эвелин |
EuLisp - это диалект Lisp со статической и динамической областью видимости, разработанный группой промышленных и академических пользователей и разработчиков Lisp со всей Европы. В разработчиках стандартов предназначены для создания нового Lisp «менее обремененного прошлым» ( по сравнению с Common Lisp ), а не так минималистским , как на схему . Другой целью было хорошо интегрировать парадигму объектно-ориентированного программирования . Это язык программирования третьего поколения .
Происхождение [ править ]
Процесс определения языка впервые начался на встрече в 1985 году в Париже и занял несколько лет. Полная спецификация и первая реализация (только интерпретируемая ) были доступны в 1990 году.
1955 г. | 1960 г. | 1965 г. | 1970 г. | 1975 г. | 1980 г. | 1985 г. | 1990 г. | 1995 г. | 2000 г. | 2005 г. | 2010 г. | 2015 г. | 2020 г. | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
LISP 1, 1.5, LISP 2 (заброшен) | ||||||||||||||
Маклисп | ||||||||||||||
Интерлисп | ||||||||||||||
Лисп-машина Лисп | ||||||||||||||
Схема | R5RS | R6RS | R7RS маленький | |||||||||||
Ноль | ||||||||||||||
Ференц Лисп | ||||||||||||||
Common Lisp | ||||||||||||||
Le Lisp | ||||||||||||||
Т | ||||||||||||||
Chez Scheme | ||||||||||||||
Emacs Lisp | ||||||||||||||
AutoLISP | ||||||||||||||
ПикоЛисп | ||||||||||||||
EuLisp | ||||||||||||||
ISLISP | ||||||||||||||
OpenLisp | ||||||||||||||
Схема PLT | Ракетка | |||||||||||||
GNU Guile | ||||||||||||||
Визуальный LISP | ||||||||||||||
Clojure | ||||||||||||||
Дуга | ||||||||||||||
LFE | ||||||||||||||
Hy |
Отличительные особенности [ править ]
Его основные черты заключаются в том, что он является Lisp-1 (без отдельных пространств имен функций и переменных), имеет объектно-ориентированную систему типа общих функций в стиле Common Lisp (CLOS) под названием The EuLisp Object System (TELOS), интегрированную с нуля. up, имеет встроенную модульную систему и определен по слоям, чтобы способствовать использованию Lisp на небольших встроенных аппаратных и образовательных машинах. Он поддерживает продолжения , хотя и не так мощно, как Scheme . Он имеет простой легкий механизм обработки ( потоки ).
Резюме [ править ]
- Определение в уровнях, в настоящее время Уровень 0 и Уровень 1
- Модули, основанные на (не первоклассных ) лексических средах.
- Лексическая область видимости , с динамическим или поздним связыванием, доступным на уровне 1.
- Единое пространство имен для имен функций и переменных (например, Scheme ).
- Легкие процессы.
- Полностью интегрированная объектная система с одиночным наследованием на уровне 0 и множественным наследованием и протоколом метаобъектов на уровне 1.
- Объектно -ориентированная система условий .
Реализации [ править ]
Первой реализацией EuLisp была Free и в конечном итоге Eulisp (FEEL). Преемником FEEL стал Youtoo (интерпретированные и скомпилированные версии) Университета Бата в Соединенном Королевстве . [3] Интерпретатор для базового уровня EuLisp, level-0 , был написан Расселом Брэдфордом в XScheme, реализации Scheme Дэвида Майкла Бетца, первоначально названной EuScheme EuScheme, но последняя версия переименована в EuXLisp [1], чтобы избежать путаница. Также Eu2C [2] , оптимизирующий компилятор EuLisp, был создан Fraunhofer ISST в рамках проекта APPLY в Германии.[3] .
Был разработан диалект EuLisp, названный Plural EuLisp. Это был EuLisp с расширениями для программирования параллельных вычислений .
Пример [ править ]
Пример использования классов в алгоритме для решения задачи « Башни Ханоя ».
( defmodule hanoi ( синтаксис ( синтаксис-0 ) импорт ( уровень-0 ) экспорт ( ханой ));;; ----------------------------------------------- - ;;; Определение башни ;;; --------------------------------------------- ---- ( defconstant * max-tower-height * 10 )( DEFCLASS <башня> () (( идентификатор читатель: башня-ID Ключевое слово: ID: ) ( блоки аксессоров: башни-блоки )))( defun build-tower ( x n ) ( labels (( loop ( i res ) ( if ( = i 0 ) res ( loop ( - i 1 ) ( cons i res ))))) (( setter tower-блоки ) x ( петля n ())) x ))( defmethod generic-print (( x <tower> ) ( s <stream> )) ( sformat s "# <tower ~ a: ~ a>" ( tower-id x ) ( башня-блоки x )));;; ----------------------------------------------- - ;;; Доступ к многоэтажным домам ;;; ------------------------------------------- ------ ( defgeneric push ( x y ))( defmethod push (( x <башня> ) ( y <fpi> )) ( let (( блоки ( блоки x ))) ( if ( или ( null? блоки ) ( < y ( блоки автомобилей ))) (( setter tower-blocks ) x ( cons y блоки )) ( error <condition> ( fmt "cannot push block of size ~ a on tower ~ a" у х )))))( Defgeneric pop ( x ))( DEFMETHOD поп (( х <башня> )) ( пусть (( блоки ( башни-блоки х ))) ( если блоки ( progn (( инкубационных башни-блоки ) х ( CDR блоки )) ( автомобильные блоки )) ( ошибка < condition> ( fmt "не может вытолкнуть блок из пустой башни ~ a" x )))));;; ----------------------------------------------- - ;;; Переместите n блоков из башни x1 в башню x2, используя x3 в качестве буфера ;;; ---------------------------------- --------------- ( стандартный ход ( 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 ( перемещение ( - n 1 ) x1 x3 x2 ) ( перемещение 1 x1 x2 x3 ) ( перемещение ( - n 1 ) x3 x2 x1 ))));;; ----------------------------------------------- - ;;; Инициализировать и запустить «Ханойские башни» ;;; -------------------------------------- ----------- ( defun hanoi () ( let (( x1 ( make <tower> id: 0 )) ( x2 ( make <tower> id: 1 )) ( x3 ( make <tower> id: 2 ))) ( строить башню x1 * максимальная высота башни * ) ( строить башню x2 0 ) (build-tower x3 0 ) ( print x1 nl x2 nl x3 nl nl ) ( move * max-tower-height * x1 x2 x3 ))))( ханой );;; ----------------------------------------------- - ) ;; Конец модуля ханой ;;; ------------------------------------------- ------
Ссылки [ править ]
- ^ "Eulisp" (PDF) . GitHub .
- ^ a b c "Эулисп" . GitHub .
- ^ Добрый, Андреас. "Youtoo" . Школа математических наук. Университет Бата . Англия . Проверено 28 октября 2018 .
- "Обзор EuLisp" , редакторы Джулиан Пэджет, Грег Нуйенс и Гарри Бреттауэр. Лисп и символьные вычисления , Том 6, номер 1-2, 1993, страницы 9–98.
- «Балансировка протокола метаобъектов EuLisp» , Гарри Бреттауэр, Юрген Копп, Харли Дэвис и Кейт Плейфорд. Лисп и символьные вычисления , том 6, выпуск 1-2, август 1993 г., страницы 119–138.
- «EuLisp в образовании» , Р. Брэдфорд и Д.К. ДеРур. Лисп и символьные вычисления , Том 6, номер 1-2, страницы 99–118.
- «Приложения Телоса» , Питер Бродбери, Кристофер Бурдорф. Лисп и символьные вычисления , том 6, выпуск 1-2, август 1993 г., страницы 139–158.
- «Практический подход к выводу типов для EuLisp» , Андреас Кинд и Хорст Фридрих. Лисп и символьные вычисления , том 6, выпуск 1-2, август 1993 г., страницы 159–176.
- «Потоки EuLisp: набор инструментов для параллелизма» , Нил Беррингтон, Питер Бродбери, Дэвид ДеРур и Джулиан Пэджет. Лисп и символьные вычисления , том 6, выпуск 1-2, август 1993 г., страницы 177–200.
- "Множественный EuLisp: примитивная символьная параллельная модель данных" , Саймон Мерралл, Джулиан Пэджет. Лисп и символьные вычисления , том 6, выпуск 1-2, август 1993 г., страницы 201–219.
- «Консервативный сборщик мусора для компилятора EuLisp в ASM / C» , Э. Ульрих Кригель. Семинар OOPSLA'93 по сбору мусора и управлению памятью , Вашингтон, округ Колумбия, 27 сентября 1993 г.
- "Реализация Telos в Common Lisp" , Объектно-ориентированные системы , т. 3. С. 31–49, 1996. ISSN 0969-9767.
Внешние ссылки [ править ]
- EuLisp FAQ и ссылки
- Версия .99 окончательной спецификации 1993 г. - ( PDF )
- Версия .991 неофициальный обновленный черновой вариант определения (2010) - ( PDF )
- Источники EuScheme
- EuLisp на GitHub , последние версии: EuLisp (с поддержкой 64-битных и др.), EuXLisp, Eu2C