ELI (programming language): Difference between revisions

Content deleted Content added
m Example Code: lang="text" <- "q"
m File extensions: <syntaxhighlight lang="q">
 
(34 intermediate revisions by 18 users not shown)
Line 1:
{{Multiple issues|
{{COI|date=April 2017}}
{{Notability|date=April 2017}}
{{Primary sources|date=April 2017}}
}}
{{Infobox programming language
|name = ELI<ref name="vector">
[http://archive.vector.org.uk/art10501180 ELI: a simple system for array programming]</ref>
|logo =
|paradigm = [[arrayArray programming|array]]
|year = 2011
|designer = Wai-Mee Ching
|developer = Hanfeng Chen<ref name="mirror">[http://cswww.queensusable.mcgill.ca/~chenhhanfeng.c/eli/ ELI - mirror site in the Sable lab at Queen'sMcGill University]</ref> (Rapidsoft)
|released = {{Start date and age|2011}}
|latest release version = 0.2
|latest release dateversion = November 30, 20130.3
|latest release date = {{Start date and age|2015|08|10}}
|typing = [[dynamic typing|dynamic]]
|programming language = [[C++]], [[Qt (software)|Qt]]
|implementations = C++
|operating_systemplatform = [[CrossIA-platform32]], [[x86-64]]
|operating system = [[Cross-platform]]: [[Windows]], [[Linux]], [[macOS]]
|file_ext = .esf .eli
|license = [[Freeware]]
|website = [http://fastarray.appspot.com/ ELI - official site]
|file_extfile ext = .esf .eli
|dialects =
|website = [http://{{URL|fastarray.appspot.com/ ELI - official site]}}
|influenced_by = [[APL (programming language)|APL]], [[Q (programming language from Kx Systems)|Q]]
|implementations = C++
|dialects =
|influenced_byinfluenced by = [[APL (programming language)|APL]], [[Q (programming language from Kx Systems)|Q]]
}}
 
'''ELI'''<ref name="website">[http{{cite web |url=https://fastarray.appspot.com/ |title=ELI: -A officialSystem site]for HostedProgramming onwith GoogleArrays App Engine|website=Disqus}}</ref> is an interactive [[Array_programming | array programming language]] language system based on the [[programming language]] [[APL (programming language) | APL]]. It has the most of functionalitiesthe functions of ISOthe APL[[International standard.Organization Infor additionStandardization]] to classical(ISO) APL standard ''ISO/IEC 13751:2001'', ELIand featuresalso list for non-homogeneous or non-rectangular data, complex numbers, symbols, temporal data, and control structures. A scripting file facility helpsis a useravailable to easily organize programs in a fashion similar to using <code>#include</code> in [[C (programming language)|C]], which also provides convenient data [[input/output]]. Moreover, ELI has dictionaries, tables, and a basic set of [[SQL | SQL]]-like statements]]. For performance, ELIit offershas a [[compiler]] restricted to flat array programs.
 
By replacing each [[APL syntax and symbols|APL character]] with one or two [[ASCII]] characters, ELI retains APL’sAPL's succinct and expressive way of doing array programming, i.e. compared with [[MATLAB]] or [[Python_Python (programming_language)programming language)| Python]], ELI encourages a dataflow style of [[Dataflow_programming |dataflow programming]] style, where the output of one operation feeds the input of another that results in greater productivity and clarity of code.
 
ELI is freeavailable andwithout availablecharge, as [[freeware]], on [[Windows]], [[Linux]], and Mac OS[[macOS]].
 
==Version 0.3==
== Example Code ==
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.<ref>{{cite web |url=https://fastarray.appspot.com/releasenote/Eli-v0.3.html |title=Overview |last=Chen |first=Hanfeng |date=2015 |website=ELI, a System for Programming with Arrays |publisher=Fastarray.appspot.com |access-date=26 February 2018}}</ref>
* 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 code==
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.
<sourcesyntaxhighlight lang="text">
!10
1 2 3 4 5 6 7 8 9 10
</syntaxhighlight>
</source>
The execution order of ELI is from right to left, and all primitive functions have '''equal precedence'''.
Exclamation point (!) is an '''interval''' function. It can generate a vector of n integer from 1 to n.
<sourcesyntaxhighlight lang="textq">
5 * 2 + 10 // from right to left, 5 * (2 + 10)
60
</syntaxhighlight>
</source>
In the next example a function <code>add</code> is declared in a short function form. The arguments of the function can be either a scalar or a vector.
The execution order of ELI is from right to left and all primitive functions have '''equal precedence'''.
<sourcesyntaxhighlight lang="textq">
{add: x+y} // short function form
add
Line 44 ⟶ 66:
1 add !10 // 1+(1..10)
2 3 4 5 6 7 8 9 10 11
</syntaxhighlight>
</source>
First, a functionThe <code>add$</code> isrotation declaredoperator inreturns athe shortreverse function form. Then, the argumentsorder of the function can take either a scalar or a vector.
<sourcesyntaxhighlight lang="textq">
$!10 // rotationreverse
10 9 8 7 6 5 4 3 2 1
</syntaxhighlight>
</source>
A 2-by-3 matrix (or higher dimension array, e.g., <code>2 3 4#!24</code>) can be generated by <code>#</code> with left argument <code>2 3</code>.
The rotation operator returns the reverse order of a vector.
<sourcesyntaxhighlight lang="textq">
2 3#!6 // 2 dimension array (matrix)
1 2 3
4 5 6
</syntaxhighlight>
</source>
TheIn first line below the <code>x</code> is assigned with a vector from 1 to 20. Then, <code>1 = 2|x</code> returns odd number <code>True</code> and even number <code>False</code>. The <code>/</code> is a primitive function for compression which '''picks up''' the value in <code>x</code> corresponding to the <code>True</code> values in its left argument.
A 2-by-3 matrix (or higher dimension array, e.g. <code>2 3 4#!24</code>) can be generated by <code>#</code> with left argument <code>2 3</code>.
<sourcesyntaxhighlight lang="textq">
x <- !20 // 1..20
x
Line 63 ⟶ 85:
(1 = 2|x) / x // get odd numbers from x
1 3 5 7 9 11 13 15 17 19
</syntaxhighlight>
</source>
 
The <code>x</code> is assigned with a vector from 1 to 20. <code>1 = 2|x</code> returns odd number <code>True</code> and even number <code>False</code>. The <code>/</code> is a primitive function for compression which '''picks up''' the value in <code>x</code> corresponding to the <code>True</code> values in its left argument.
==File extensions==
 
Two file extensions are used in ELI for exchanging and sharing code for different purposes: <code>.esf</code> and <code>.eli</code>.
 
An ELI file with extension <code>.esf</code> is a script file which contains all methods and data. A simple way to create a script file is using the command <code>)out</code>. However, a clean workspace with no debugging or error information left is needed before a script file can be created. Later the command <code>)fload</code> can be used to reload the script file.
 
<syntaxhighlight lang="text">
)out MyScript
)lib
MyScript.esf
)fload MyScript
saved 2017.02.17 10:23:55 (gmt-5)
</syntaxhighlight>
 
An ELI file with extension <code>.eli</code> is an ELI workspace file which contains everything in a workspace. <code>save</code> and <code>load</code> are commands for workspace files.
 
<syntaxhighlight lang="q">
)save MyWorkspace
)load MyWorkspace
saved 2017.02.17 10:57:19 (gmt-5)
</syntaxhighlight>
 
==References==
{{reflistReflist}}
 
==SeeExternal alsolinks==
* {{Official website|fastarray.appspot.com}}
* [[APL (programming language)|APL]] - the first array programming language
* [https://fastarray.appspot.com/docs/ Online documentation]{{Dead link|date=December 2019 |bot=InternetArchiveBot |fix-attempted=yes}}
* [[J (programming language)|J]] - another APL-inspired language
* [https://www.youtube.com/channel/UCpq4XRc7A1YNbEnBRx9-jzw YouTube channel]
* [[Q (programming language from Kx Systems)|Q]] - Q (programming language from Kx Systems)
 
{{APL programming language}}
 
[[Category:Array programming languages]]
[[Category:APL programming language family]]
[[Category:Array programming languages]]