EuLisp - EuLisp
![]() | |
Paradigma | multi-paradigma: funkční, procesní, meta, objektově orientovaný |
---|---|
Rodina | Lisp |
Poprvé se objevil | 1990 |
Náhled verze | 0.991[1] / 2010 |
Psací disciplína | silný, dynamický |
OS | Linux |
Přípony názvu souboru | .em |
Hlavní, důležitý implementace | |
EuXLisp,[2] Ty taky,[2] Eu2C[2] | |
Ovlivněno | |
Společný Lisp, InterLisp, LeLisp, Lisp / VM, Systém, T, CLOS, ObjVlisp, Oaklisp, MicroCeyx, MCS, Standardní ML, Haskell | |
Ovlivněno | |
Dylan, ISLISP Evelin |
EuLisp je staticky a dynamicky rozsahem Lisp dialekt vyvinutý volnou formací průmyslových a akademických uživatelů a vývojářů Lisp z celé Evropy. The standardizátory zamýšlel vytvořit nový Lisp "méně zatížen minulostí" (ve srovnání s Společný Lisp ), a ne tak minimalistický tak jako Systém. Dalším cílem bylo integrovat objektově orientované programování paradigma dobře. Je to programovací jazyk třetí generace.
Původ
Proces definice jazyka poprvé začal na schůzce v roce 1985 v Paříž a trvalo několik let. Kompletní specifikace a první implementace (interpretován - pouze) byly zpřístupněny v roce 1990.
1955 | 1960 | 1965 | 1970 | 1975 | 1980 | 1985 | 1990 | 1995 | 2000 | 2005 | 2010 | 2015 | 2020 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
LISP 1, 1,5, LISP 2(opuštěný) | ||||||||||||||
Maclisp | ||||||||||||||
Interlisp | ||||||||||||||
Lisp stroj Lisp | ||||||||||||||
Systém | R5RS | R6RS | R7RS malý | |||||||||||
NULA | ||||||||||||||
Franz Lisp | ||||||||||||||
Společný Lisp | ||||||||||||||
Le Lisp | ||||||||||||||
T | ||||||||||||||
Chez Scheme | ||||||||||||||
Emacs Lisp | ||||||||||||||
AutoLISP | ||||||||||||||
PicoLisp | ||||||||||||||
EuLisp | ||||||||||||||
ISLISP | ||||||||||||||
OpenLisp | ||||||||||||||
Schéma PLT | Raketa | |||||||||||||
GNU Guile | ||||||||||||||
Vizuální LISP | ||||||||||||||
Clojure | ||||||||||||||
Oblouk | ||||||||||||||
LFE | ||||||||||||||
Hy |
Charakteristické rysy
Jeho hlavní rysy spočívají v tom, že se jedná o Lisp-1 (bez samostatné funkce a jmenných prostorů proměnných), má a Společný systém objektů Lisp (CLOS) styl objektově orientovaného typu s obecnou funkcí typu objekt Objektový systém EuLisp (TELOS) integrovaný od základu, má vestavěný modulový systém a je definován ve vrstvách, aby podporoval použití Lispu na malých, zabudovaných hardwarových a vzdělávacích strojích. Podporuje to pokračování, i když ne tak mocně jako Systém. Má jednoduchý lehký procesní mechanismus (vlákna ).
souhrn
- Definice na úrovních, aktuálně na úrovni 0 a úrovni 1
- Moduly založené naprvní třída ) lexikální prostředí.
- Lexikálně vymezeno, s dynamickým nebo pozdní vazba k dispozici v úrovni 1.
- Jeden prostor jmen pro názvy funkcí a proměnných (jako Systém ).
- Lehké procesy.
- Plně integrovaný objektový systém s jedno dědictví na úrovni 0 a vícenásobné dědictví a metaobjektový protokol na úrovni 1.
- An objektově orientovaný stavový systém.
Implementace
Včasná implementace EuLispu byla Zdarma a nakonec Eulisp (CÍTIT). Nástupcem FEEL byl Ty taky (interpretováno a sestaven verze), podle University of Bath v Spojené království.[3] Tlumočník pro základní úroveň EuLisp, úroveň 0, napsal Russell Bradford v XScheme, implementaci Systém David Michael Betz, původně pojmenovaný EuScheme EuScheme ale nejnovější verze je přejmenována na EuXLisp [1] vyhnout se zmatku. Také Eu2C [2], kompilátor optimalizující EuLisp, vytvořil Fraunhofer ISST v rámci projektu APPLY v Německu [3].
Byl vyvinut dialekt EuLisp, pojmenovaný Plural EuLisp. Byl to EuLisp paralelní výpočty programovací rozšíření.
Příklad
Příklad použití tříd v algoritmu k řešení "Věže Hanoje "problém.
(defmodule Hanoi (syntax (syntaxe-0) import (úroveň 0) vývozní (Hanoi));;;-------------------------------------------------;;; Definice věže;;;-------------------------------------------------(vadný * maximální výška věže * 10)(defclass <tower> () ((id čtenář: ID věže klíčové slovo: id:) (bloky přistupující osoba: věžové bloky)))(defun stavět věž (X n) (štítky ((smyčka (i res) (-li (= i 0) res (smyčka (- i 1) (nevýhody i res))))) ((seřizovač věžové bloky) X (smyčka n ())) X))(defmethod generický tisk ((X <tower>) (s <stream>)) (sformát s "# " (ID věže X) (věžové bloky X)));;;-------------------------------------------------;;; Přístup do panelových domů;;;-------------------------------------------------(defgenerický tam (X y))(defmethod tam ((X <tower>) (y <fpi>)) (nechat ((bloky (věžové bloky X))) (-li (nebo (nula? bloky) (< y (auto bloky))) ((seřizovač věžové bloky) X (nevýhody y bloky)) (chyba <condition> (fmt "nelze tlačit blok o velikosti ~ a na věži ~ a" y X)))))(defgenerický pop (X))(defmethod pop ((X <tower>)) (nechat ((bloky (věžové bloky X))) (-li bloky (progn ((seřizovač věžové bloky) X (cdr bloky)) (auto bloky)) (chyba <condition> (fmt "nelze vyskočit blok z prázdné věže ~ a" X)))));;;-------------------------------------------------;;; Přesuňte n bloků z věže x1 do věže x2 pomocí x3 jako vyrovnávací paměti;;;-------------------------------------------------(defgenerický přestěhovat se (n x1 x2 x3))(defmethod přestěhovat se ((n <fpi>) (x1 <tower>) (x2 <tower>) (x3 <tower>)) (-li (= n 1) (progn (tam x2 (pop x1)) (tisk x1 nl x2 nl x3 nl nl)) (progn (přestěhovat se (- n 1) x1 x3 x2) (přestěhovat se 1 x1 x2 x3) (přestěhovat se (- n 1) x3 x2 x1))));;;-------------------------------------------------;;; Inicializujte a spusťte Hanojské věže;;;-------------------------------------------------(defun Hanoi () (nechat ((x1 (udělat <tower> id: 0)) (x2 (udělat <tower> id: 1)) (x3 (udělat <tower> id: 2))) (stavět věž x1 * maximální výška věže *) (stavět věž x2 0) (stavět věž x3 0) (tisk x1 nl x2 nl x3 nl nl) (přestěhovat se * maximální výška věže * x1 x2 x3)))(Hanoi);;;-------------------------------------------------) ;; Konec modulu hanoi;;;-------------------------------------------------
Reference
- "Přehled EuLisp", Redaktoři Julian Padget, Greg Nuyens a Harry Bretthauer. Lisp a symbolický výpočet, Svazek 6, číslo 1-2, 1993, strany 9–98.
- „Vyvážení protokolu EuLisp Metaobject“ Harry Bretthauer, Jürgen Kopp, Harley Davis a Keith Playford. Lisp a symbolický výpočet, Svazek 6, Vydání 1-2, Srpen 1993, strany 119-138.
- „EuLisp ve vzdělávání“ R. Bradford a D.C. DeRoure. Lisp a symbolický výpočet, Svazek 6, Číslo 1-2, strany 99–118.
- "Aplikace Telos", Peter Broadbery, Christopher Burdorf. Lisp a symbolický výpočet, Svazek 6, Vydání 1-2, Srpen 1993, strany 139-158.
- „Praktický přístup k odvození typu pro EuLisp“, Andreas Kind a Horst Friedrich. Lisp a symbolický výpočet, Díl 6, číslo 1-2, srpen 1993, strany 159-176.
- „EuLisp Threads: A Concurrency Toolbox“, Neil Berrington, Peter Broadbery, David DeRoure a Julian Padget. Lisp a symbolický výpočet, Díl 6, číslo 1-2, srpen 1993, strany 177-200.
- „Množné číslo EuLisp: Primitivní symbolický datový paralelní model“ Simon Merrall, Julian Padget. Lisp a symbolický výpočet, Svazek 6, Vydání 1-2, Srpen 1993, strany 201-219.
- „Konzervativní sběrač odpadků pro kompilátor EuLisp na ASM / C“, E. Ulrich Kriegel. Workshop OOPSLA'93 o sběru odpadu a správě paměti, Washington, DC, 27. září 1993.
- „Implementace Telos v Common Lisp“, Objektově orientované systémy, sv. 3, s. 31–49, 1996. ISSN 0969-9767.
externí odkazy
- EuLisp - časté dotazy a odkazy
- Verze .99 konečné specifikace z roku 1993 - (PDF )
- Verze .991 neoficiálně aktualizovaná definice konceptu (2010) - (PDF )
- EuScheme Zdroje
- EuLisp na GitHub, nejnovější verze: EuLisp (s 64bitovou podporou a více), EuXLisp, Eu2C