ELI (programming language)

This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these messages)

A major contributor to this article appears to have a close connection with its subject. It may require cleanup to comply with Wikipedia's content policies, particularly neutral point of view. Please discuss further on the talk page. (April 2017) (Learn how and when to remove this message)

|

The topic of this article may not meet Wikipedia's general notability guideline. Please help to demonstrate the notability of the topic by citing reliable secondary sources that are independent of the topic and provide significant coverage of it beyond a mere trivial mention. If notability cannot be shown, the article is likely to be merged, redirected, or deleted.
Find sources: "ELI" programming language – news · newspapers · books · scholar · JSTOR (April 2017) (Learn how and when to remove this message)

|

This article relies excessively on references to primary sources. Please improve this article by adding secondary or tertiary sources.
Find sources: "ELI" programming language – news · newspapers · books · scholar · JSTOR (April 2017) (Learn how and when to remove this message)

|

(Learn how and when to remove this message)

ELI[1]

Paradigm| array
Designed by| Wai-Mee Ching
Developer| Hanfeng Chen[2] (Rapidsoft)
First appeared| 2011; 14 years ago (2011)
Stable release|

0.3 / August 10, 2015; 9 years ago (2015-08-10)

Typing discipline| dynamic
Implementation language| C++, Qt
Platform| IA-32, x86-64
OS| Cross-platform: Windows, Linux, macOS
License| Freeware
Filename extensions| .esf .eli
Website| fastarray.appspot.com
Influenced by
APL, Q

ELI[3] is an interactive array programming language system based on the programming language APL. It has most of the functions of the International Organization for Standardization (ISO) APL standard ISO/IEC 13751:2001, and also list for non-homogeneous or non-rectangular data, complex numbers, symbols, temporal data, and control structures. A scripting file facility is available to organize programs in a fashion similar to using `#include` in C, which also provides convenient data input/output. ELI has dictionaries, tables, and a basic set of SQL-like statements. For performance, it has a compiler restricted to flat array programs.

By replacing each APL character with one or two ASCII characters, ELI retains APL's succinct and expressive way of array programming compared with MATLAB or Python, ELI encourages a dataflow programming style, where the output of one operation feeds the input of another.

ELI is available without charge, as freeware, on Windows, Linux, and macOS.

## Version 0.3

[edit]

ELI version 0.3, described as a stable release, was released on August 10, 2015. It integrates with a cross-platform IDE, ELI Studio, which provides a code editor with specialized functions to write and load ELI code. Three added widgets are used to monitor functions, variables, libraries and command history.

Version 0.3 adds several new features.[4]

* Like: string match
* Match
* []PP: printing precision control
* )time: performance measure
* []: standard input
* Date and time attributes
* File handle: []open, []close, []write, and []get
* Semicolon (;)

## Example code

[edit]

A line of ELI executes from right to left as a chain of operations; anything to the right of ‘//’ is a comment.

Exclamation point (!) is an interval function. It can generate a vector of n integer from 1 to n.

!10
1 2 3 4 5 6 7 8 9 10

The execution order of ELI is from right to left, and all primitive functions have equal precedence.

5 * 2 + 10 // from right to left, 5 * (2 + 10)

In the next example a function `add` is declared in a short function form. The arguments of the function can be either a scalar or a vector.

{add: x+y} // short function form
add
1 add 2    // 1+2

1 add !10  // 1+(1..10)
2 3 4 5 6 7 8 9 10 11

The `$` rotation operator returns the reverse order of a vector.

$!10       // reverse
10 9 8 7 6 5 4 3 2 1

A 2-by-3 matrix (or higher dimension array, e.g., `2 3 4#!24`) can be generated by `#` with left argument `2 3`.

2 3#!6     // 2 dimension array (matrix)
1 2 3
4 5 6

In first line below the `x` is assigned with a vector from 1 to 20. Then, `1 = 2|x` returns odd number `True` and even number `False`. The `/` is a primitive function for compression which picks up the value in `x` corresponding to the `True` values in its left argument.

x <- !20   // 1..20

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
(1 = 2|x) / x  // get odd numbers from x
1 3 5 7 9 11 13 15 17 19

## File extensions

[edit]

Two file extensions are used in ELI for exchanging and sharing code for different purposes: `.esf` and `.eli`.

An ELI file with extension `.esf` is a script file which contains all methods and data. A simple way to create a script file is using the command `)out`. However, a clean workspace with no debugging or error information left is needed before a script file can be created. Later the command `)fload` can be used to reload the script file.

)out MyScript
)lib
MyScript.esf
)fload MyScript
saved 2017.02.17 10:23:55 (gmt-5)

An ELI file with extension `.eli` is an ELI workspace file which contains everything in a workspace. `save` and `load` are commands for workspace files.

)save MyWorkspace
)load MyWorkspace
saved 2017.02.17 10:57:19 (gmt-5)

## References

[edit]

1. ^ ELI: a simple system for array programming
2. ^ ELI - mirror site in the Sable lab at McGill University
3. ^ "ELI: A System for Programming with Arrays". Disqus.
4. ^ Chen, Hanfeng (2015). "Overview". ELI, a System for Programming with Arrays. Fastarray.appspot.com. Retrieved 26 February 2018.

## External links

[edit]

* Official website
* Online documentation[permanent dead link]
* YouTube channel

* v
* t
* e

APL programming

Features|

* APL syntax and symbols
* Direct function (dfn)
* Code pages
* Iverson bracket
* Rank
* Shared Variables

Implementations|

| Major|

* Dyalog APL
* APL2 → APLX
* SHARP APL
* NARS → NARS2000°

|

Dialects|

* A → A+°
* APLNext → VisualAPL
* ELI
* GNU APL°
* J°
* kdb+
* K, Q
* Polymorphic Programming Language (PPL)

Community|

| Professional
associations|

* Association for Computing Machinery: SIGAPL
* British APL Association

|

Organizations|

| Business|

* Ampere
* Analogic Corporation
* APL2000
* CompuServe
* Digital Equipment Corporation (DEC)
* DNA Systems
* Dyalog Ltd.
* IBM
* I. P. Sharp Associates
* Kx Systems
* Micro Computer Machines (MCM)
* Science Research Associates
* Scientific Time Sharing Corporation (STSC)
* Soliton Incorporated
* Telecompute Integrated Systems, Inc.
* Time Sharing Resources (TSR)

|

Education|

* Carnegie Mellon University (CMU)
* University of Maryland

People|

* Phil Abrams
* Bob Bernecky
* Larry Breed
* Charles Brenner
* Fred Brooks
* Jim Brown
* Adin Falkoff
* Patrick E. Hagerty
* Herbert Hellerman
* Roger Hui
* Kenneth E. Iverson
* Dick Lathwell
* Eugene McDonnell
* Robert Metzger
* Roger Moore
* Alan Perlis
* John Scholes
* J. Henri Schueler
* Bob Smith
* Edward H. Sussenguth Jr.
* Arthur Whitney
* William Yerazunis
* Rodnay Zaks

* Iverson Award

* Italics = discontinued
* ° = Open-source software
Commons Category

*[v]: View this template
*[t]: Discuss this template
*[e]: Edit this template