EuLisp

Last updated
EuLisp
EuLispLogo.png
Paradigm multi-paradigm: functional, procedural, meta, object-oriented
Family Lisp
First appeared1990;34 years ago (1990)
Preview release
0.991 [1] / 2010;14 years ago (2010)
Typing discipline strong, dynamic
Scope static and dynamic
OS Linux
Filename extensions .em
Major implementations
EuXLisp, [2] Youtoo, [2] Eu2C [2]
Influenced by
Common Lisp, InterLisp, LeLisp, Lisp/VM, Scheme, T, CLOS, ObjVlisp, Oaklisp, MicroCeyx, MCS, Standard ML, Haskell
Influenced
Dylan, ISLISP, Evelin

EuLisp is a statically and dynamically scoped Lisp dialect developed by a loose formation of industrial and academic Lisp users and developers from around Europe. The standardizers intended to create a new Lisp "less encumbered by the past" (compared to Common Lisp), and not so minimalist as Scheme. Another objective was to integrate the object-oriented programming paradigm well. It is a third-generation programming language.

Contents

Origin

The language definition process first began in a meeting in 1985 in Paris and took several years. The complete specification and a first implementation (interpreted-only) were made available in 1990.

19581960196519701975198019851990199520002005201020152020
 LISP 1, 1.5, LISP 2(abandoned)
  Maclisp
  Interlisp
  MDL
  Lisp Machine Lisp
  Scheme  R5RS R6RS R7RS small
  NIL
  ZIL (Zork Implementation Language)
  Franz Lisp
  Common Lisp  ANSI standard
  Le Lisp
  MIT Scheme
  XLISP
  T
  Chez Scheme
  Emacs Lisp
  AutoLISP
  PicoLisp
  Gambit
  EuLisp
  ISLISP
  OpenLisp
  PLT Scheme   Racket
  newLISP
  GNU Guile
  Visual LISP
  Clojure
  Arc
  LFE
  Hy
  Chialisp

Distinguishing features

Its main traits are that it is a Lisp-1 (no separate function and variable namespaces), has a Common Lisp Object System (CLOS) style generic-function type object-oriented system named The EuLisp Object System (TELOS) integrated from the ground up, has a built-in module system, and is defined in layers to promote the use of the Lisp on small, embedded hardware and educational machines. It supports continuations, though not as powerfully as Scheme. It has a simple lightweight process mechanism (threads).

Summary

Implementations

An early implementation of EuLisp was Free and Eventually Eulisp (FEEL). The successor to FEEL was Youtoo (interpreted and compiled versions), by University of Bath in the United Kingdom. [3] An interpreter for the basic level of EuLisp, level-0, was written by Russell Bradford in XScheme, an implementation of Scheme by David Michael Betz, originally named EuScheme EuScheme but the most recent version is renamed EuXLisp to avoid confusion. Also Eu2C , a EuLisp optimizing compiler, was created by Fraunhofer ISST under the APPLY project in Germany .

A dialect of EuLisp was developed, named Plural EuLisp. It was EuLisp with parallel computing programming extensions.

Example

Example use of classes in the algorithm to solve the "Towers of Hanoi" problem.

(defmodulehanoi(syntax(syntax-0)import(level-0)export(hanoi));;;-------------------------------------------------;;; Tower definition;;;-------------------------------------------------(defconstant*max-tower-height*10)(defclass<tower>()((idreader:tower-idkeyword:id:)(blocksaccessor:tower-blocks)))(defunbuild-tower(xn)(labels((loop(ires)(if(=i0)res(loop(-i1)(consires)))))((settertower-blocks)x(loopn()))x))(defmethodgeneric-print((x<tower>)(s<stream>))(sformats"#<tower ~a: ~a>"(tower-idx)(tower-blocksx)));;;-------------------------------------------------;;; Access to tower blocks;;;-------------------------------------------------(defgenericpush(xy))(defmethodpush((x<tower>)(y<fpi>))(let((blocks(tower-blocksx)))(if(or(null?blocks)(<y(carblocks)))((settertower-blocks)x(consyblocks))(error<condition>(fmt"cannot push block of size ~a on tower ~a"yx)))))(defgenericpop(x))(defmethodpop((x<tower>))(let((blocks(tower-blocksx)))(ifblocks(progn((settertower-blocks)x(cdrblocks))(carblocks))(error<condition>(fmt"cannot pop block from empty tower ~a"x)))));;;-------------------------------------------------;;; Move n blocks from tower x1 to tower x2 using x3 as buffer;;;-------------------------------------------------(defgenericmove(nx1x2x3))(defmethodmove((n<fpi>)(x1<tower>)(x2<tower>)(x3<tower>))(if(=n1)(progn(pushx2(popx1))(printx1nlx2nlx3nlnl))(progn(move(-n1)x1x3x2)(move1x1x2x3)(move(-n1)x3x2x1))));;;-------------------------------------------------;;; Initialize and run the 'Towers of Hanoi';;;-------------------------------------------------(defunhanoi()(let((x1(make<tower>id:0))(x2(make<tower>id:1))(x3(make<tower>id:2)))(build-towerx1*max-tower-height*)(build-towerx20)(build-towerx30)(printx1nlx2nlx3nlnl)(move*max-tower-height*x1x2x3)))(hanoi);;;-------------------------------------------------);; End of module hanoi;;;-------------------------------------------------

Related Research Articles

In logic and computer science, the Boolean satisfiability problem (sometimes called propositional satisfiability problem and abbreviated SATISFIABILITY, SAT or B-SAT) is the problem of determining if there exists an interpretation that satisfies a given Boolean formula. In other words, it asks whether the variables of a given Boolean formula can be consistently replaced by the values TRUE or FALSE in such a way that the formula evaluates to TRUE. If this is the case, the formula is called satisfiable. On the other hand, if no such assignment exists, the function expressed by the formula is FALSE for all possible variable assignments and the formula is unsatisfiable. For example, the formula "a AND NOT b" is satisfiable because one can find the values a = TRUE and b = FALSE, which make (a AND NOT b) = TRUE. In contrast, "a AND NOT a" is unsatisfiable.

<span class="mw-page-title-main">Common Lisp</span> Programming language standard

Common Lisp (CL) is a dialect of the Lisp programming language, published in American National Standards Institute (ANSI) standard document ANSI INCITS 226-1994 (S2018). The Common Lisp HyperSpec, a hyperlinked HTML version, has been derived from the ANSI Common Lisp standard.

In mathematics and computer programming, exponentiating by squaring is a general method for fast computation of large positive integer powers of a number, or more generally of an element of a semigroup, like a polynomial or a square matrix. Some variants are commonly referred to as square-and-multiply algorithms or binary exponentiation. These can be of quite general use, for example in modular arithmetic or powering of matrices. For semigroups for which additive notation is commonly used, like elliptic curves used in cryptography, this method is also referred to as double-and-add.

<span class="mw-page-title-main">Lisp (programming language)</span> Programming language family

Lisp is a family of programming languages with a long history and a distinctive, fully parenthesized prefix notation. Originally specified in 1960, it is the third-oldest high-level programming language still in common use, after Fortran and COBOL. Lisp has changed since its early days, and many dialects have existed over its history. Today, the best-known general-purpose Lisp dialects are Common Lisp, Scheme, Racket, and Clojure.

<span class="mw-page-title-main">Scheme (programming language)</span> Dialect of Lisp

Scheme is a dialect of the Lisp family of programming languages. Scheme was created during the 1970s at the MIT Computer Science and Artificial Intelligence Laboratory and released by its developers, Guy L. Steele and Gerald Jay Sussman, via a series of memos now known as the Lambda Papers. It was the first dialect of Lisp to choose lexical scope and the first to require implementations to perform tail-call optimization, giving stronger support for functional programming and associated techniques such as recursive algorithms. It was also one of the first programming languages to support first-class continuations. It had a significant influence on the effort that led to the development of Common Lisp.

<span class="mw-page-title-main">Tic-tac-toe</span> Paper-and-pencil game for two players

Tic-tac-toe, noughts and crosses, or Xs and Os is a paper-and-pencil game for two players who take turns marking the spaces in a three-by-three grid with X or O. The player who succeeds in placing three of their marks in a horizontal, vertical, or diagonal row is the winner. It is a solved game, with a forced draw assuming best play from both players.

In computer science, a dynamic programming language is a class of high-level programming languages, which at runtime execute many common programming behaviours that static programming languages perform during compilation. These behaviors could include an extension of the program, by adding new code, by extending objects and definitions, or by modifying the type system. Although similar behaviors can be emulated in nearly any language, with varying degrees of difficulty, complexity and performance costs, dynamic languages provide direct tools to make use of them. Many of these features were first implemented as native features in the Lisp programming language.

In computer science, hygienic macros are macros whose expansion is guaranteed not to cause the accidental capture of identifiers. They are a feature of programming languages such as Scheme, Dylan, Rust, Nim, and Julia. The general problem of accidental capture was well known in the Lisp community before the introduction of hygienic macros. Macro writers would use language features that would generate unique identifiers or use obfuscated identifiers to avoid the problem. Hygienic macros are a programmatic solution to the capture problem that is integrated into the macro expander. The term "hygiene" was coined in Kohlbecker et al.'s 1986 paper that introduced hygienic macro expansion, inspired by terminology used in mathematics.

In computer science, a continuation is an abstract representation of the control state of a computer program. A continuation implements (reifies) the program control state, i.e. the continuation is a data structure that represents the computational process at a given point in the process's execution; the created data structure can be accessed by the programming language, instead of being hidden in the runtime environment. Continuations are useful for encoding other control mechanisms in programming languages such as exceptions, generators, coroutines, and so on.

In mathematics, a monomial order is a total order on the set of all (monic) monomials in a given polynomial ring, satisfying the property of respecting multiplication, i.e.,

Logic forms are simple, first-order logic knowledge representations of natural language sentences formed by the conjunction of concept predicates related through shared arguments. Each noun, verb, adjective, adverb, pronoun, preposition and conjunction generates a predicate. Logic forms can be decorated with word senses to disambiguate the semantics of the word. There are two types of predicates: events are marked with e, and entities are marked with x. The shared arguments connect the subjects and objects of verbs and prepositions together. Example input/output might look like this:

Input: The Earth provides the food we eat every day. Output: Earth:n_#1(x1) provide:v_#2(e1, x1, x2) food:n_#1(x2) we(x3) eat:v_#1(e2, x3, x2; x4) day:n_#1(x4)
<span class="mw-page-title-main">X-League (Japan)</span> Japanese league of American football

The X-League is the top-level Professional Gridiron football league in Japan. It was founded in 1971 as the Japan American Football League, the first X Bowl was played in 1987. The league changed its name to the X League in 1997. There are four divisions among which there is promotion and relegation. Teams are split into different divisions or blocks, depending on the tier. There are two types of teams, one being a company team in which only employees of that particular sponsoring company may play, and the other being a club team for which anyone can try out.

<span class="mw-page-title-main">Pinhole camera model</span> Model of 3D points projected onto planar image via a lens-less aperture

The pinhole camera model describes the mathematical relationship between the coordinates of a point in three-dimensional space and its projection onto the image plane of an ideal pinhole camera, where the camera aperture is described as a point and no lenses are used to focus light. The model does not include, for example, geometric distortions or blurring of unfocused objects caused by lenses and finite sized apertures. It also does not take into account that most practical cameras have only discrete image coordinates. This means that the pinhole camera model can only be used as a first order approximation of the mapping from a 3D scene to a 2D image. Its validity depends on the quality of the camera and, in general, decreases from the center of the image to the edges as lens distortion effects increase.

In mathematics and computer science, apply is a function that applies a function to arguments. It is central to programming languages derived from lambda calculus, such as LISP and Scheme, and also in functional languages. It has a role in the study of the denotational semantics of computer programs, because it is a continuous function on complete partial orders. Apply is also a continuous function in homotopy theory, and, indeed underpins the entire theory: it allows a homotopy deformation to be viewed as a continuous path in the space of functions. Likewise, valid mutations (refactorings) of computer programs can be seen as those that are "continuous" in the Scott topology.

The PROPT MATLAB Optimal Control Software is a new generation platform for solving applied optimal control and parameters estimation problems.

In mathematics, and more specifically in computer algebra and elimination theory, a regular chain is a particular kind of triangular set of multivariate polynomials over a field, where a triangular set is a finite sequence of polynomials such that each one contains at least one more indeterminate than the preceding one. The condition that a triangular set must satisfy to be a regular chain is that, for every k, every common zero (in an algebraically closed field) of the k first polynomials may be prolongated to a common zero of the (k + 1)th polynomial. In other words, regular chains allow solving systems of polynomial equations by solving successive univariate equations without considering different cases.

In mathematics, Boole's rule, named after George Boole, is a method of numerical integration.

LOOP is a simple register language that precisely captures the primitive recursive functions. The language is derived from the counter-machine model. Like the counter machines the LOOP language comprises a set of one or more unbounded registers, each of which can hold a single non-negative integer. A few arithmetic instructions operate on the registers. The only control flow instruction is 'LOOP x DO...END'. It causes the instructions within its scope to be repeated x times.

In mathematics, Ingleton's inequality is an inequality that is satisfied by the rank function of any representable matroid. In this sense it is a necessary condition for representability of a matroid over a finite field. Let M be a matroid and let ρ be its rank function, Ingleton's inequality states that for any subsets X1, X2, X3 and X4 in the support of M, the inequality

<span class="mw-page-title-main">LFE (programming language)</span>

Lisp Flavored Erlang (LFE) is a functional, concurrent, garbage collected, general-purpose programming language and Lisp dialect built on Core Erlang and the Erlang virtual machine (BEAM). LFE builds on Erlang to provide a Lisp syntax for writing distributed, fault-tolerant, soft real-time, non-stop applications. LFE also extends Erlang to support metaprogramming with Lisp macros and an improved developer experience with a feature-rich read–eval–print loop (REPL). LFE is actively supported on all recent releases of Erlang; the oldest version of Erlang supported is R14.

References

  1. "Eulisp" (PDF). GitHub. Archived from the original (PDF) on 2012-03-06. Retrieved 2017-09-20.
  2. 1 2 3 "Eulisp". GitHub.
  3. Kind, Andreas. "Youtoo". School of Mathematical Sciences. University of Bath. England. Retrieved 2018-10-28.