Jump to content

EuLisp

EuLisp
Парадигма мультипарадигмальность : функциональная , процедурная , мета , объектно-ориентированная.
Семья Лисп
Впервые появился 1990 год ; 34 года назад ( 1990 )
Предварительный выпуск
0.991 [1] / 2010 ; 14 лет назад ( 2010 )
Дисциплина набора текста сильный , динамичный
Объем статический и динамический
ТЫ Линукс
Расширения имен файлов
Основные реализации
EuXLisp, [2] Ты тоже, [2] Eu2C [2]
Под влиянием
Common Lisp , InterLisp , LeLisp , Lisp/VM, Scheme , T , CLOS , ObjVlisp , Oaklisp , MicroCeyx, MCS, Standard ML , Haskell
Под влиянием
Дилан , ИСЛИСП , Эвелин

EuLisp со статической и динамической областью действия, — это диалект Лиспа разработанный группой промышленных и академических пользователей и разработчиков Lisp со всей Европы. Стандартизаторы , намеревались создать новый Lisp, «менее обремененный прошлым» (по сравнению с Common Lisp ), и не такой минималистичный как Scheme . Другая цель заключалась в хорошей интеграции парадигмы объектно-ориентированного программирования . Это язык программирования третьего поколения .

Происхождение [ править ]

Процесс определения языка впервые начался на встрече в 1985 году в Париже и занял несколько лет. Полная спецификация и первая реализация ( только интерпретация ) были доступны в 1990 году.

1958 1960 1965 1970 1975 1980 1985 1990 1995 2000 2005 2010 2015 2020
ЛИСП 1, 1.5, ЛИСП 2 (заброшенный)
 Маклисп
 Интерлисп
 леев
 Лисп-машина Лисп
 Схема Р5РС Р6РС R7RS маленький
 НОЛЬ
 ЗИЛ (язык реализации Zork)
 Франц Лисп
 Общий Лисп стандарт ANSI
 Лисп
 Схема СО
 XLISP
 Т
 На схеме
 Эмакс Лисп
 АвтоЛИСП
 ПикоЛисп
 Гамбит
 EuLisp
 ИСЛИСП
 ОпенЛисп
 Схема PLT  Ракетка
 новыйLISP
 GNU Коварство
 Визуальный ЛИСП
 Кложур
 Дуга
 ЛФЭ
 Он
 Хиалисп

Отличительные особенности [ править ]

Его основные черты заключаются в том, что это Lisp-1 (без отдельных пространств имен функций и переменных), имеет Common Lisp Object System объектно-ориентированную систему типа общей функции в стиле (CLOS) под названием The EuLisp Object System (TELOS), интегрированную с нуля. up, имеет встроенную систему модулей и определяется по уровням, чтобы способствовать использованию Lisp на небольшом встроенном оборудовании и образовательных машинах. Он поддерживает продолжения , хотя и не так эффективно, как Scheme . Он имеет простой и легкий механизм обработки ( потоки ).

Резюме [ править ]

Реализации [ править ]

Ранней реализацией EuLisp была Free и Sustainable 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
  (syntax (syntax-0)
   import (level-0)
   export (hanoi))

;;;-------------------------------------------------
;;; Tower definition
;;;-------------------------------------------------
(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)))

;;;-------------------------------------------------
;;; Access to tower blocks
;;;-------------------------------------------------
(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 "cannot push block of size ~a on tower ~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 "cannot pop block from empty tower ~a" x)))))

;;;-------------------------------------------------
;;; Move n blocks from tower x1 to tower x2 using x3 as buffer
;;;-------------------------------------------------
(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))))

;;;-------------------------------------------------
;;; Initialize and run the 'Towers of Hanoi'
;;;-------------------------------------------------
(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)))

(hanoi)

;;;-------------------------------------------------
)  ;; End of module hanoi
;;;-------------------------------------------------

Ссылки [ править ]

  1. ^ «Юлисп» (PDF) . Гитхаб . Архивировано из оригинала (PDF) 6 марта 2012 г. Проверено 20 сентября 2017 г.
  2. Перейти обратно: Перейти обратно: а б с «Эулисп» . Гитхаб .
  3. ^ Добрый, Андреас. "Ты тоже" . Школа математических наук. Университет Бата . Англия . Проверено 28 октября 2018 г.

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 8936bce2d44cdd5927a14975e7d6d89d__1710689100
URL1:https://arc.ask3.ru/arc/aa/89/9d/8936bce2d44cdd5927a14975e7d6d89d.html
Заголовок, (Title) документа по адресу, URL1:
EuLisp - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)