EuLisp

редактировать
EuLisp
EuLispLogo.png
Парадигма мультипарадигма : функциональный, процедурный, 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 ), и не столь минималистичного как Схема. Другой целью было хорошо интегрировать парадигму объектно-ориентированного программирования. Это язык программирования третьего поколения.

Содержание
  • 1 Источник
  • 2 Отличительные особенности
    • 2.1 Резюме
  • 3 Реализации
  • 4 Пример
  • 5 Ссылки
  • 6 Внешние ссылки
Происхождение

Процесс определения языка впервые начался на встрече в 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))) (ханой) ;;; ------------------------------------ -------------) ;; Конец модуля ханой ;;; ------------------------------------------- ------
Ссылки
Внешние ссылки
  • значок Портал компьютерного программирования
Последняя правка сделана 2021-05-19 05:59:54
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте