APL.jl: Difference between revisions

From APL Wiki
Jump to navigation Jump to search
No edit summary
(remove opinion)
Line 25: Line 25:


== Differences from APL ==
== Differences from APL ==
APL.jl is not recommended for use as a standard APL implementation due to being incomplete and non-portable. The following is a non-exhaustive list of differences from modern APL.
The following is a non-exhaustive list of differences from modern APL.
* Unicode symbols used are not from Miscellaneous Technical block, are instead borrowed from Julia's set<ref>https://docs.juliahub.com/CalculusWithJulia/AZHbv/0.0.5/misc/unicode.html</ref>
* Unicode symbols used are not from Miscellaneous Technical block, are instead borrowed from Julia's set<ref>https://docs.juliahub.com/CalculusWithJulia/AZHbv/0.0.5/misc/unicode.html</ref>
* Majority of basic primitives and overloads missing<ref>https://github.com/shashi/APL.jl/blob/master/src/defns.jl</ref>
* Majority of basic primitives and overloads missing<ref>https://github.com/shashi/APL.jl/blob/master/src/defns.jl</ref>

Revision as of 04:45, 23 September 2022


APL.jl is a toy dialect of APL made for interfacing with the Julia language.

Implementation

APL.jl works on a minor subset of APL that allows the compiler to parse and translate APL code into Julia code. Due to this, APl.jl always returns Julia data. Dfns defined using APl.jl can hence be used directly in Julia code like ordinary functions.

The apl"" string macro parses and evaluates an APL expression. The parser works on the reverse of the APL code, using the help of concatenation rules to recognize the syntax of the expression.[1]

APL.jl can be used from apl"", and as a REPL triggered with / from within the Julia REPL. It can be built and installed from source in the REPL using the Pkg library.

Differences from APL

The following is a non-exhaustive list of differences from modern APL.

  • Unicode symbols used are not from Miscellaneous Technical block, are instead borrowed from Julia's set[2]
  • Majority of basic primitives and overloads missing[3]
  • Treatment of scalars as 1-element vectors
  • No method to create character arrays
  • Monadic is redefined for broadcasting (each left), no support for binding arguments
  • Absence of tradfns, dops, function trains
  • Incorrect stranding for nested arrays ((1 2) (3 4)≡1 2 3 4)
  • Lack of reshape for case where (×/⍴⍵)≢×/⍺
  • Addition of getIndex function ][4]

External Links

References