I: Difference between revisions
No edit summary |
mNo edit summary |
||
(6 intermediate revisions by the same user not shown) | |||
Line 17: | Line 17: | ||
}} | }} | ||
'''I''' is an experimental language by [[Marshall Lochbaum]], based on the concept of extending the implicit mapping used by array languages to all datatypes including functions. Lochbaum has described the language as "not usable" and stated that he tried to avoid the constraining nature of I's design decisions in his later | '''I''' is an experimental language by [[Marshall Lochbaum]], based on the concept of extending the implicit mapping used by array languages to all datatypes including functions. Lochbaum has described the language as "not usable" and stated that he tried to avoid the constraining nature of I's design decisions in his later language [[BQN]].<ref>[[Marshall Lochbaum]]. [https://mlochbaum.github.io/BQN/commentary/history.html "BQN's development history"].</ref> New I features that later appeared in other languages (not always by direct influence) include the 2-[[train]] meaning [[Atop]], [[Hook]] and [[Constant]] operators, and the ambivalent [[Pair]] function. | ||
Like [[K]], the | Like [[K]], the language uses nested lists rather than arrays in order to simplify the design. Although a related paper defines mapping over [[Dictionary|associative arrays]], references, and sets, as of 2021 the I implementation only supports lists and functions as datatypes. I uses a left-to-right syntax that allows whitespace to indicate [[precedence]] in addition to parentheses. Every value can be called as a function, and every function takes two arguments, with the function <code>.</code> used to call functions of one argument. Primitive functions are written with single ASCII characters, while identifiers are surrounded with single quotes. I has no function definition syntax; instead functions must be defined using [[tacit programming]]. As a result there is only a single global scope for variables. | ||
I is implemented using soft typing and [[wikipedia:Just-in-time compilation|JIT compilation]] for many operations, targetting [[wikipedia:x86-64|x86-64]] directly. | I is implemented using soft typing and [[wikipedia:Just-in-time compilation|JIT compilation]] for many operations, targetting [[wikipedia:x86-64|x86-64]] directly. | ||
Line 26: | Line 26: | ||
<references /> | <references /> | ||
{{APL dialects}}[[Category: | {{APL dialects}}[[Category:List-based array languages]][[Category:Languages with first-class functions]][[Category:Languages with tacit programming]][[Category:ASCII languages]][[Category:Left to right]][[Category:Dynamic compilers]] |
Latest revision as of 22:35, 16 March 2024
I is an experimental language by Marshall Lochbaum, based on the concept of extending the implicit mapping used by array languages to all datatypes including functions. Lochbaum has described the language as "not usable" and stated that he tried to avoid the constraining nature of I's design decisions in his later language BQN.[2] New I features that later appeared in other languages (not always by direct influence) include the 2-train meaning Atop, Hook and Constant operators, and the ambivalent Pair function.
Like K, the language uses nested lists rather than arrays in order to simplify the design. Although a related paper defines mapping over associative arrays, references, and sets, as of 2021 the I implementation only supports lists and functions as datatypes. I uses a left-to-right syntax that allows whitespace to indicate precedence in addition to parentheses. Every value can be called as a function, and every function takes two arguments, with the function .
used to call functions of one argument. Primitive functions are written with single ASCII characters, while identifiers are surrounded with single quotes. I has no function definition syntax; instead functions must be defined using tacit programming. As a result there is only a single global scope for variables.
I is implemented using soft typing and JIT compilation for many operations, targetting x86-64 directly.
References
APL dialects [edit] | |
---|---|
Maintained | APL+Win ∙ APL2 ∙ APL64 ∙ APL\iv ∙ Aplette ∙ April ∙ Co-dfns ∙ Dyalog APL ∙ Dyalog APL Vision ∙ dzaima/APL ∙ GNU APL ∙ Kap ∙ NARS2000 ∙ Pometo ∙ TinyAPL |
Historical | A Programming Language ∙ A+ (A) ∙ APL# ∙ APL2C ∙ APL\360 ∙ APL/700 ∙ APL\1130 ∙ APL\3000 ∙ APL.68000 ∙ APL*PLUS ∙ APL.jl ∙ APL.SV ∙ APLX ∙ Extended Dyalog APL ∙ Iverson notation ∙ IVSYS/7090 ∙ NARS ∙ ngn/apl ∙ openAPL ∙ Operators and Functions ∙ PAT ∙ Rowan ∙ SAX ∙ SHARP APL ∙ Rationalized APL ∙ VisualAPL (APLNext) ∙ VS APL ∙ York APL |
Derivatives | AHPL ∙ BQN ∙ CoSy ∙ ELI ∙ Glee ∙ I ∙ Ivy ∙ J ∙ Jelly ∙ K (Goal, Klong, Q) ∙ KamilaLisp ∙ Lang5 ∙ Lil ∙ Nial ∙ RAD ∙ Uiua |
Overviews | Comparison of APL dialects ∙ Timeline of array languages ∙ Timeline of influential array languages ∙ Family tree of array languages |