Парадигма | мультипарадигма : функциональный, процедурный, meta, объектно-ориентированное |
---|---|
Семейство | Lisp |
Впервые появилось | 1990; 30 лет назад (1990 г.) |
Предварительный выпуск | 0.991 / 2010; 10 лет назад (2010) |
Дисциплина ввода | сильный, динамический |
OS | Linux |
Расширения имен файлов | .em |
Основные реализации | |
EuXLisp, Youtoo, Eu2C | |
Под влиянием | |
Common Lisp, InterLisp, LeLisp, Lisp / VM, Scheme, T, CLOS, ObjVlisp, Oaklisp, MicroCeyx, MCS, Standard ML, Haskell | |
под влиянием | |
Dylan, ISLISP, Evelin |
EuLisp - это статически и динамически scoped Lisp диалект, разработанный свободной группой промышленных и академических пользователей и разработчиков Lisp со всей Европы. стандартизаторы предназначались для создания нового Lisp, «менее обремененного прошлым» (по сравнению с Common Lisp ), и не столь минималистичного как Схема. Другой целью было хорошо интегрировать парадигму объектно-ориентированного программирования. Это язык программирования третьего поколения.
Процесс определения языка впервые начался на встрече в 1985 году в Париже и занял несколько лет. Полная спецификация и первая реализация (только интерпретируемый ) были доступны в 1990 году.
Его основными чертами является то, что это Lisp-1 ( без отдельных пространств имен функций и переменных), имеет объектно-ориентированную систему типа общих функций в стиле Common Lisp Object System (CLOS) под названием The EuLisp Object System (TELOS), интегрированную с нуля, имеет встроенную в модульной системе и определен по слоям, чтобы продвигать использование Lisp на небольших встроенных аппаратных и образовательных машинах. Он поддерживает продолжения, хотя и не так мощно, как Схема. Он имеет простой легкий механизм процесса (нитей ).
Ранняя реализация EuLisp была бесплатной и со временем Eulisp (FEEL). Преемником FEEL стал Youtoo (интерпретированная и скомпилированная версии) от University of Bath в Соединенном Королевстве. Переводчик для базовый уровень EuLisp, уровень-0, был написан Расселом Брэдфордом в XScheme, реализация Scheme Дэвида Майкла Бетца, первоначально названная EuScheme EuScheme, но m Последняя версия переименована в EuXLisp [1], чтобы избежать путаницы. Также Eu2C [2], оптимизирующий компилятор EuLisp, был создан Fraunhofer ISST в рамках проекта APPLY в Германии [3].
Был разработан диалект EuLisp, названный Plural EuLisp. Это был EuLisp с программными расширениями для параллельных вычислений.
Пример использования классов в алгоритме для решения проблемы «Ханойские башни ».
(defmodule hanoi (syntax (syntax-0) import (level-0) export (hanoi)) ;;; ----------------------- -------------------------- ;;; Определение башни ;;; ---------------- --------------------------------- (defconstant * max-tower-height * 10) (defclass() ((id reader: tower-id ключевое слово: id :) (блок доступа: tower-block))) (defun build-tower (xn) (labels ((loop (i res) (if (= i 0) res ( loop (- i 1) (cons i res))))) ((башня-установщик) x (loop n ())) x)) (defmethod generic-print ((x ) (s )) (sformat s "# " (идентификатор башни x) (блоки башни x))) ;;; ---------------------- --------------------------- ;;; Доступ к многоэтажным домам ;;; ------------- ------------------------------------ (defgeneric push (xy)) (defmethod push ((x ) (y )) (let ((блоки (блоки x)))) (if (or (null? Blocks) (< y (car blocks))) ((setter tower-blocks) x (cons y blocks)) (error (fmt "не может толкать блок размера ~ a на башню ~ a) "yx))))) (defgeneric pop (x)) (defmethod pop ((x )) (let ((блоки (блоки x)))) (if блоки (progn ((setter tower-блоки) x (cdr bl ocks)) (автомобиль блокируется)) (ошибка (fmt "не может вытолкнуть блок из пустой башни ~ a" x))))) ;;; ---------------- --------------------------------- ;;; Переместите n блоков из башни x1 в башню x2, используя x3 в качестве буфера ;;; ---------------------------------- --------------- (defgeneric move (n x1 x2 x3)) (defmethod move ((n ) (x1 ) (x2 ) (x3 )) (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) (движение (- n 1) x3 x2 x1)))) ;;; ------------------------------- ------------------ ;;; Инициализировать и запустить «Ханойские башни» ;;; -------------------------------------- ----------- (defun hanoi () (let ((x1 (make id: 0)) (x2 (make id: 1)) (x3 (make id: 2))) (build-tower x1 * max-tower-height *) (build-tower x2 0) (build-tower x3 0) (print x1 nl x2 nl x3 nl nl) (перемещение * max-tower- высота * x1 x2 x3))) (ханой) ;;; ------------------------------------ -------------) ;; Конец модуля ханой ;;; ------------------------------------------- ------