https://aplwiki.com/index.php?title=Special:NewPages&feed=atom&hideredirs=1&limit=50&offset=&namespace=0&username=&tagfilter=&size-mode=max&size=0APL Wiki - New pages [en-gb]2021-01-19T05:52:33ZFrom APL WikiMediaWiki 1.33.1https://aplwiki.com/wiki/APL_5100APL 51002021-01-13T08:00:43Z<p>Adám Brudzewsky: </p>
<hr />
<div>{{Infobox array language<br />
| array model = [[flat array model|flat]] without [[box|boxes]]<br />
| index origin = <source lang=apl inline>⎕IO</source>0 or 1<br />
| function styles = [[defined function]]<br />
| numeric types = floats (64-bit [[wikipedia:IBM_hexadecimal_floating_point|HFP]])<br />
| unicode support = no<br />
| released = 1976<br />
| developer = [[IBM]]<br />
| implementation languages = [[wikipedia:IBM_Basic_Assembly_Language_and_successors|BAL]]<br />
| platforms = [https://en.wikipedia.org/wiki/IBM_5100 IBM 5100]<br />
| operating systems =<br />
| documentation = [http://www.bitsavers.org/pdf/ibm/5100/ Documentation suite]<br />
| influenced by = [[APL.SV]]<br />
}}<br />
<br />
'''APL 5100''' was the one of the two programming languages that ran on the [https://en.wikipedia.org/wiki/IBM_5100 IBM 5100].<br />
The 5100 was a portable (25 kg/55 lb) computer, released in the UK in 1976, and is regarded by some as the grandfather of the [[IBM]] PC. At the time of its release, the smallest model cost about £9000, then the price of a London apartment.<br />
<br />
The IBM 5100 was available with 16K, 32K, 48K and 64K bytes memory sizes, and a 16K machine had an available [[workspace]] size of just over 9K bytes. It used a proprietary 16-bit processor called PALM which could run emulators for the System/360 and System/3, and could run APL and/or [[wikipedia:BASIC|BASIC]], depending on the model. The code for the APL and BASIC interpreters was stored in ROM, referred to as ROS (Read Only Storage) in the Maintenance Manuals. The APL interpreter was based on System/360's [[APL.SV]].<br />
<br />
== External links ==<br />
<br />
* [http://www.bitsavers.org/pdf/ibm/5100/ Documentation suite]<br />
{{APL dialects}}[[Category:IBM APL dialects]][[Category:Flat array languages]]</div>Romillyhttps://aplwiki.com/wiki/DzaimaDzaima2020-12-28T11:35:25Z<p>Adám Brudzewsky: links</p>
<hr />
<div>{{DISPLAYTITLE:dzaima}}<br />
[[File:Dzaima logo.png|thumb|right|dzaima's avatar]]<br />
<br />
'''Dzaima''' is the user name of a software developer from Latvia who achieved 2nd place in the [[APL_Problem_Solving_Competition#2020|2020 APL Problem Solving Competition]]. He is the author of [[dzaima/APL]], [[dzaima/BQN]] and the BQN386 [[fonts|font]], and frequents the [[APL Orchard]].<br />
<br />
==Notable Software Projects==<br />
* [[dzaima/APL]]: An APL implementation written in Java. It has an Android version, and has a [https://processing.org/ Processing] integration for graphical output.<br />
* [[dzaima/BQN]]: A [[BQN]] implementation made in a similar manner to dzaima/APL. It has an Android version, which is a work-in-progress.<br />
* [https://dzaima.github.io/BQN386/ dzaima/BQN386]: An extension of the APL386 Unicode font designed to add support for BQN [[glyph]]s, and other character sets.<br />
* [https://github.com/dzaima/paste paste]: A website suited for sharing and displaying APL and BQN code.<br />
* [https://github.com/dzaima/hackerskeyboard APL Hacker's Keyboard]: A fork of the Hacker's Keyboard app that adds an input method for [[typing glyphs|typing APL glyphs]].<br />
{{APL community}}{{DEFAULTSORT:Dzaima}}[[Category:People]][[Category:Designers]][[Category:Implementers]]</div>Razetimehttps://aplwiki.com/wiki/Advent_Of_CodeAdvent Of Code2020-12-17T13:23:00Z<p>Adám Brudzewsky: </p>
<hr />
<div>[[File:Advent Of Code Logo.png|thumb|right|Advent Of Code Logo]]<br />
'''[https://adventofcode.com/ Advent of Code]''' ('''AoC''') is an [[wikipedia:Advent calendar|Advent calendar]] of small programming puzzles for a variety of skill sets and skill levels that can be solved in any programming language. This page catalogues efforts by users to solve these puzzles in APL. Feel free to [{{fullurl:{{FULLPAGENAME}}|action=edit&section=1}} add more], including your own.<br />
<br />
The solutions can be used as references for solving the puzzles, or just a general way to hone your APL skills.<br />
<br />
=== Individuals' solutions ===<br />
{|<br />
|-<br />
| [[Jay Foad]]: || [https://github.com/jayfoad/aoc2017apl 2017], [https://github.com/jayfoad/aoc2018apl 2018], [https://github.com/jayfoad/aoc2019apl 2019], [https://github.com/jayfoad/aoc2020apl 2020]<br />
|-<br />
| Rory Kemp: || [https://github.com/rak1507/Advent-Of-Code-2020-APL 2020]<br />
|-<br />
| [[User:Xpqz|Stefan Kruger]]: || [https://github.com/xpqz/AoCDyalog 2015–2020]<br />
|-<br />
| Woosuk Kwak: || [https://github.com/Bubbler-4/advent-of-apl 2015–2020]<br />
|-<br />
| Lavender: || [https://github.com/lvdr/aoc2020 2020]<br />
|-<br />
| Matthew Maycock: || [https://github.com/ummaycoc/aoc-2019.apl 2019]<br />
|-<br />
| [[Nick Nickolov]] || [https://git.sr.ht/~ngn/a/tree 2020]<br />
|-<br />
| voidhawk: || [https://github.com/voidhawk42/AoC-APL/tree/main/2017 2017], [https://github.com/voidhawk42/aoc2018 2018], [https://github.com/voidhawk42/aoc2019apl 2019], [https://github.com/voidhawk42/AoC-APL/tree/main/2020 2020]<br />
|-<br />
| [[User:Razetime|Raghu Ranganathan]]: || [https://github.com/razetime/AOC2020-APL 2020]<br />
|-<br />
| schatzmeister: || [https://github.com/schatzmeister/adventofcode 2020]<br />
|-<br />
|}<br />
[[category:lists]][[Category:Online resources]]{{APL community}}</div>Razetimehttps://aplwiki.com/wiki/Neural_networksNeural networks2020-12-08T01:24:04Z<p>Adám Brudzewsky: </p>
<hr />
<div>'''Neural networks''' ('''NNs'''), or more precisely '''artificial neural networks''' ('''ANNs'''), are computing systems vaguely inspired by the biological neural networks of brains.<br />
<br />
This is a list of APL resources relating to neural networks:<br />
<br />
* Rodrigo Girão Serrão is prepared to hold a workshop in English or Portuguese called [https://mathspp.com/workshops/learn-apl-with-neural-nets Learn APL with neural networks]/[https://mathspp.com/pt/workshops/learn-apl-with-neural-nets Aprende APL com redes neuronais] and is publishing an English-language [https://www.youtube.com/playlist?list=PLgTqamKi1MS3p-O0QAgjv5vt4NY5OgpiM a video series] with the same content, designed so those with APL or NN knowledge can skip the parts that teach the basics of these.<br />
<br />
* [https://dl.acm.org/doi/10.1145/3315454.3329960 Convolutional neural networks in APL] is a paper that shows how a Convolutional Neural Network (CNN) can be implemented in APL. The code is available in [https://github.com/ashinkarov/cnn-in-apl a GitHub repository]. A video of the presentation of this conference paper is available [https://www.youtube.com/watch?v=9vIZ7d3-GBw here].<br />
<br />
* Mike Powell's [[Media:3_Machine_Learning.pdf|Machine Learning]] is a tutorial that explores pattern recognition for handwritten digits. It focuses on deriving the analytic gradients and establishing them as part of the back propagation algorithm.<br />
<br />
* Mike Powell's [[Media: 4_The_Handwritten_Digits_Model.pdf|The Handwritten Digits Model]] tutorial explores how to estimate the parameters of the handwritten digits model using an interactive session, with the objective to explore how to conduct an estimation rather than to find the absolute best search algorithm.<br />
<br />
* [https://github.com/annser/annser#annser ANNSER] ― A Neural Network Simulator for Education and Research<br />
<br />
* [https://romilly.github.io/o-x-o/ MENACE Revisited] ― Reinforcement Learning From The Ground Up (implements [[wikipedia:Donald Michie|Donald Michie]]’s [[wikipedia:Matchbox Educable Noughts and Crosses Engine|Matchbox Educable Noughts and Crosses Engine]] using [[Dyalog APL]])<br />
<br />
[[category:Lists]][[category:Examples]]{{APL development}}</div>Adám Brudzewskyhttps://aplwiki.com/wiki/KAPKAP2020-11-26T08:08:11Z<p>Marshall: Bump latest release to 2021</p>
<hr />
<div>{{Infobox array language<br />
| array model = [[nested array model|nested]]<br />
| index origin = 0<br />
| function styles = block (like [[dfn]]s)<br />
| numeric types = 64-bit float, 64-bit integer, complex (64-bit float components)<br />
| unicode support = full<br />
| released = 2020<br />
| developer = [[Elias Mårtenson]]<br />
| latest release version = 2021 (unversioned)<br />
| implementation languages = [[wikipedia:Kotlin_(Programming_Language)|Kotlin]]<br />
| source = [https://github.com/lokedhs/array GitHub]<br />
| platforms = JVM, Native Linux, In-browser, [[wikipedia:Node.js|Node.js]]<br />
| license = MIT<br />
| file ext = .kap<br />
| influenced by = [[Dyalog APL]], [[GNU APL]]<br />
| run online = [https://kapdemo.dhsdevelopments.com/ JS Client]<br />
}}<br />
<br />
'''KAP''' is an array-based language that aims to implement most of standard APL, along with additional features. Much of standard APL works in KAP, although if an APL feature does not fit with KAP's design, those features are changed or removed.<br />
<br />
== Lazy evaluation ==<br />
<br />
The main difference compared to APL is that KAP is lazy-evaluated. This means that the language gives the developers very loose guarantees when (or if, and how many times) a function will actually be invoked. For example, <source lang=apl inline>↑ f¨ ⍳10</source> will only make a single call to <source lang=apl inline>f</source> because <code>f¨ ⍳10</code> will not immediately evaluate the result but only return a delayed evaluation. Since all but the first result is then discarded, those results will never be computed.<br />
<br />
== Differences from APL ==<br />
<br />
The following is a list of significant differences compared to APL:<br />
<br />
* Lazy evaluation<br />
* All values are immutable, it is not possible to modify the content of an array<br />
* Ability to define custom syntax<br />
* Native hash table support<br />
{{APL dialects}}[[Category:APL dialects]][[Category:Nested array languages]][[Category:Leading axis languages]]</div>Lokehttps://aplwiki.com/wiki/List_of_famous_APL_usersList of famous APL users2020-11-25T19:08:29Z<p>Marshall: Add link to Stanley Jordan's page describing some of his APL history</p>
<hr />
<div>This page lists people or companies that have made significant use of APL, and are famous for reasons other than APL specifically ([[Ken Iverson]] and [[Arthur Whitney]] are the only people to achieve substantial fame for APL or array programming).<br />
<br />
== Individuals ==<br />
<br />
* [[wikipedia:Fred Brooks|Fred Brooks]]<ref>[[Adin Falkoff]] and [[Ken Iverson]]. [https://www.jsoftware.com/papers/APLEvol.htm The Evolution of APL]. ACM SIGPLAN Notices Volume 13, Number 8. 1978-08.</ref><br />
* [[wikipedia:Stanley Jordan|Stanley Jordan]]<ref>Stanley Jordan. [http://www.stanleyjordan.com/subjects/tools.html V. Tools and Technology]: The APL Language. Accessed 2021-01-07.</ref> has presented at [[APL89]] and [[APL90]] and attended [[Minnowbrook]]<br />
* [[wikipedia:Bill Gates|Bill Gates]]<ref>Jay Whipple III. [https://dyalog.tv/Dyalog16/?v=fbryH10d4UU Lessons from 40 Years of APL (Not Old Enough for 50 Years!)] at [[Dyalog '16]].</ref><ref>[[wikipedia:Bill Gates|Bill Gates]]. [[wikipedia:Open Letter to Hobbyists|Open Letter to Hobbyists]]. 1976.</ref><br />
* [[Alan Perlis]]<br />
* [[Richard Stallman]]<br />
<br />
== Organizations ==<br />
<br />
Because of APL's wide reach historically, only organizations that have major APL projects or groups with many programmers are listed.<br />
<br />
=== Companies ===<br />
<br />
* [[IBM]]<br />
* [[wikipedia:SimCorp|SimCorp]] presents frequently at [[Dyalog user meeting]]s<br />
<br />
=== Universities ===<br />
<br />
* [[wikipedia:SUNY Binghamton|SUNY Binghamton]]<br />
* [[Syracuse University]]<br />
<br />
== References ==<br />
<references /><br />
<br />
[[Category:Lists]]</div>Marshallhttps://aplwiki.com/wiki/Timeline_of_APL_dialectsTimeline of APL dialects2020-11-24T20:05:41Z<p>Adám Brudzewsky: </p>
<hr />
<div>This page lists APL dialects by date of release (that is, when they became available to a significant portion of the public).<br />
<br />
{|class=wikitable<br />
! Year !! Dialects<br />
|-<br />
| 1966 || [[APL\360]] internal IBM release<br />
|-<br />
| 1968 || [[APL\1130]], [[APL\360]]<br />
|-<br />
| 1970 || [[APL*PLUS]], [[APL\5500]]<br />
|-<br />
| 1971 || [[APL/700]] (approximate date)<br />
|-<br />
| 1973 || [[APL.SV]]<br />
|-<br />
| 1974 || [[APL 5100]], [[MCM/70]]<br />
|-<br />
| 1976 || [[VS APL]], [[SHARP APL]], [[APL\3000]], [[APL\11]]<br />
|-<br />
| 1981 || [[NARS]]<br />
|-<br />
| 1983 || [[Dyalog APL]], [[APL.68000]] (approximate date)<br />
|-<br />
| 1984 || [[APL2]]<br />
|-<br />
| 1985 || [[A]]<br />
|-<br />
| 1988 || [[A+]]<br />
|-<br />
| 1989 || [[I-APL]]<br />
|-<br />
| 1993 || [[SAX]]<br />
|-<br />
| 1995 || [[APL+Win]]<br />
|-<br />
| 1998 || [[OpenAPL]]<br />
|-<br />
| 2002 || [[APLX]]<br />
|-<br />
| 2004 || [[Rowan]]<br />
|-<br />
| 2006 || [[NARS2000]]<br />
|-<br />
| 2009 || [[VisualAPL]]<br />
|-<br />
| 2010 || [[APL-sharp|APL#]]<br />
|-<br />
| 2011 || [[ELI]], [[ngn/apl]]<br />
|-<br />
| 2013 || [[GNU APL]]<br />
|-<br />
| 2014 || [[Co-dfns]]<br />
|-<br />
| 2018 || [[April]], [[dzaima/APL]], [[APL\iv]], [[Extended Dyalog APL]]<br />
|-<br />
| 2020 || [[KAP]]<br />
|}<br />
{{APL dialects}}[[Category:Timelines]][[Category:APL history]]</div>Marshallhttps://aplwiki.com/wiki/TatinTatin2020-11-12T04:46:05Z<p>Marshall: Standardize Dyalog version link</p>
<hr />
<div>[[File:Tatin.png|thumb|right|200px|Tatin's logo is the [[logarithm]] glyph coloured to become a stylised [[wikipedia:Tarte Tatin|Tarte Tatin]].]]<br />
'''Tatin''' is a [[wikipedia:package manager|package manager]] for [[Dyalog APL]]. It is a community-developed project distributed under the [[wikipedia:MIT License|MIT License]].<br />
<br />
An interface to Tatin, consisting of a set of [[user command]]s, is expected to be included with [[Dyalog APL 19.0|Dyalog 19.0]]. <br />
<br />
The name refers to a [[wikipedia:Tarte Tatin|Tarte Tatin]], which is a form of apple tart. Things associated with APL are often given a name alluding to apples due to the similar pronunciation of ''apple'' and ''APL''.<br />
<br />
== External links ==<br />
* [https://github.com/aplteam/Tatin Tatin GitHub repository]<br />
* [https://tatin.dev/ tatin.dev – the principal Tatin server]<br />
{{Template:APL development}}<br />
[[Category:Dyalog APL]]</div>Andrii Makukhahttps://aplwiki.com/wiki/Array_notationArray notation2020-11-05T22:57:09Z<p>Adám Brudzewsky: /* History */</p>
<hr />
<div>'''Array notation''' is a way to write most [[array]]s literally, with no or minimal use of [[primitive function]]s, possibly over multiple code lines. While APL has had at least simple numeric [[strand notation]] since [[APL\360]], no major APL has implemented native support for an extended notation as of 2020.<br />
<br />
Medium-sized array constants are often needed in code. Due to the lack of a native multi-line notation, programmers have resorted to various ad-hoc methods of approximating such, usually at the cost of reduced [[readability]]. A very common technique is repeated [[concatenate|concatenation]]:<br />
<source lang=apl><br />
poss←1 2⍴'fns' ((0 1)(0.7 0)(0.7 0)×size)<br />
poss⍪← 'fnd' ((0 1)(0 0)(0 0)×size)<br />
poss⍪← 'lines'((0 0)(0.7 0)(0.7 0)×size)<br />
poss⍪← 'lnd' ((0 0)(0 0)(0 0)×size)<br />
</source><br />
== History ==<br />
[[File:Nested Arrays System array notation.png|thumb|right|Array notation in [[NARS]].]]<br />
=== 1981 ===<br />
When [[NARS]] introduced [[nested array theory]], the need for a way to represent complex structures was already recognised. Though a formal notation was never adopted, much less implemented, the NARS reference manual included round parentheses to delimit nested arrays.<ref>Cheney, Carl M. ''APL*PLUS Nested Arrays System'' (reference manual). [http://www.sudleyplace.com/APL/Nested%20Arrays%20System.pdf#page=7 1.1 What are nested arrays?] [[STSC]]. 1981.</ref><br />
<br />
=== 2014 ===<br />
At [[Dyalog '14]], [[Morten Kromberg]] said:<br />
:''The emphasis on using scripts to store source code means that it's probably time for us to come up with a notation for constants in the language so that in your script you can declare matrices and so on in a nice readable fashion.''<br />
Although no concrete proposal was made at the time, he set the expectation of this being the subject of a presentation the following year.<ref>[[Morten Kromberg|Kromberg, Morten]]. [https://dyalog.tv/Dyalog14/?v=rRRyDWaU1fA Technical Road Map]. [[Dyalog '15]].</ref><br />
<br />
=== 2015 ===<br />
At [[Dyalog '15]], [[Phil Last]] explained that he considered the lack of such a notation a big hole in APL notation and gave a suggestions for such a notation. He presented a model using square brackets to indicate collections of [[major cell]]s of [[rank]] 1 or higher, delimited by line breaks and/or [[diamond]]s, for example <source lang=apl inline>[1 2 3 ⋄ 4 5 6]</source> would be equivalent to <source lang=apl inline>2 3⍴1 2 3 4 5 6</source>. He also proposed that if the delimited expressions were [[assignment]]s, then the notation would instead declare members of an anonymous [[namespace]], for example for example <source lang=apl inline>[a←3 ⋄ b←6]</source>. He pointed out that this overloading of the symbols meant that the array notation could only represent constants, as allowing general expressions would lead to ambiguity. He also mentioned that doubled symbols or [[Unicode]] brackets could be used instead.<ref>[[Phil Last|Last, Phil]]. [https://dyalog.tv/Dyalog15/?v=9-HAvTMhYao APL Array Notation] ([https://www.dyalog.com/uploads/conference/dyalog15/presentations/U07_APL_Array_Notation.pdf transcript]). [[Dyalog '15]].</ref><br />
<br />
After the presentation, Phil Last had a conversation with [[Adám Brudzewsky]] who had recently joined [[Dyalog Ltd.]], the [[language developer|language developer]] of [[Dyalog APL]], and who was inspired to begin an internal Dyalog research project on the matter. Meanwhile, Acre Desktop, a project manager that Last co-develops, moved from storing APL items in [[component file]]s to storing them in text files, necessitating a literal notation for arrays, and his notation for arrays was adopted. Acre stores unscripted namespaces as directories, so the need for a literal namespace notation only arises when a namespace is an element in a larger array, something that is quite unlikely for application constants.<br />
<br />
=== 2016 ===<br />
Phil Last published a more formal proposal in the [[Vector Journal]]. Again, the notation was only described as a serialisation format; not as an integral part of the language. He added escape sequences to [[string]]s, further distancing the notation from compatibility with existing APL code.<ref>Last, Phil. [http://archive.vector.org.uk/art10501450 A Notation for APL array Embedding and Serialization]. Vector Journal, Volume 26, number 4. [[British APL Association]]. 2016.</ref><br />
<br />
[[File:D11 Literal Notation for Arrays and Namespaces - Summary of notations.png|thumb|right|Array notation at [[Dyalog '17]].]]<br />
===2017===<br />
At [[Dyalog '17]], Adám Brudzewsky proposed an alternative notation using round parentheses to indicate collections of major cells of any rank, thus allowing the notation to express [[nested]] vectors though [[scalar]] major cells, for example <source lang=apl inline>(⊂1 2 3 ⋄ ⊂4 5 6)</source> would be equivalent to <source lang=apl inline>(1 2 3)(4 5 6)</source>. This notation had a striking similarity to the informal notation used in the [[NARS]] reference manual over 35 years prior. For namespace, he proposed using colon (<source lang=apl inline>:</source>) to delimit [[wikipedia:name-value pair|name-value pair]]s, inspired by [[wikipedia:JSON|JSON]] in which colon is used in the same manner, despite assignment being denoted by <source lang=javascript inline>=</source> in [[wikipedia:JavaScript|JavaScript]], from which JSON was derived. This distinction allowed arbitrary expressions in arrays, opening the possibility of full integration into the language, while also allowing a namespace with no members to be denoted <source lang=apl inline>()</source>. Last's proposal required <source lang=apl inline>[:]</source> to distinguish it from [[bracket indexing]] into a vector while eliding the indices, a technique used to address all [[element]]s.<br />
<br />
In addition to the main array notation, Brudzewsky also proposed allowing line breaks between quotes in [[string]]s to represent a vector of character vectors (with leading and trailing spaces trimmed).<ref>[[Adám Brudzewsky|Brudzewsky, Adám]]. [https://dyalog.tv/Dyalog17/?v=CRQNzL8cUQE Literal Notation for Arrays and Namespaces]. [[Dyalog '17]]</ref> While not included in the live presentation, Brudzewsky's slide deck included a discussion of whether expressions resulting in a scalar should be treated as [[singleton]] vectors or not. It concluded that if they were treated as [[vector]]s, then an alternative notation in the form of a [[wikipedia:line continuation|line continuation]] character would be necessary to allow writing large vectors over multiple lines of code.<ref>Brudzewsky, Adám [https://www.dyalog.com/uploads/conference/dyalog17/presentations/D11_Literal_Notation_for_Arrays_and_Namespaces.pdf Literal Notation for Arrays and Namespaces] (slides). [[Dyalog '17]]</ref><br />
[[File:D04 Array Notation Mk III - Summary - Arrays.png|thumb|right|Array notation at [[Dyalog '18]].]]<br />
===2018===<br />
At [[Dyalog '18]], Adám Brudzewsky returned with a solution to the issue on whether scalars should be regarded as 1-element vectors (thus increasing the rank of the containing array) or left as scalars (thus forming a vector). He reintroduced square brackets as collections of major cells of rank 1 or higher, repurposing round parentheses as vectors.<br />
<br />
The namespace notation remained as before, using round parentheses so the empty namespace could be written in a consistent manner, but he presented formalised scoping rules for the value expressions, namely that these would run in the surrounding namespace, but within their own scope, so any assignment done during such an expression. For example <source lang=apl inline>(a:b,b←1 2)</source> would neither populate the new namespace with a member <source lang=apl inline>b</source>, nor create such a variable in the global scope.<ref>Brudzewsky, Adám. [https://dyalog.tv/Dyalog18/?v=GAdQuOtPcfM Array Notation Mk III]. [[Dyalog '18]].</ref> Acre quickly adopted this notation.<br />
<br />
[[File:D09 Array Notation RC1 - Questions.png|thumb|right|Array notation at [[Dyalog '20]]]]<br />
===2020===<br />
In the spring of 2020, [[dzaima/APL]] adopted the proposed array notation with the exception of forcing the result of statements in square brackets to rank 1 or higher.<ref>Stack Exchange user [https://codegolf.stackexchange.com/users/59183/dzaima dzaima]. [https://github.com/dzaima/APL dzaima/APL]. Git commit "[https://github.com/dzaima/APL/commit/dfebe5de3699b2e3f838a60f72c6b9a9f66317e7 <source lang=apl inline>[1 2⋄3 4]</source>, <source lang=apl inline>⎕AV</source>,]". GitHub.</ref><br />
<br />
At [[Dyalog '20]], Adám Brudzewsky presented the notation as ''Release Candidate 1'' and showed how [[Dyalog APL 18.0]]'s updated version of [https://github.com/Dyalog/link/wiki Link] (a simple interface for using source code in text files, synchronising the file system and the [[workspace]]) includes experimental support the array notation, including a facility to use multi-line array notation inside functions. He estimated that [[Dyalog APL 20.0]] will include native interpreter support for the notation in 2022.<br />
<br />
== References ==<br />
<references/><br />
{{APL syntax}}[[Category:APL syntax]][[Category:Nested array model]]</div>Adám Brudzewskyhttps://aplwiki.com/wiki/TerminologyTerminology2020-10-28T07:46:45Z<p>Adám Brudzewsky: /* Translations */</p>
<hr />
<div>While written APL is mostly symbolic, facilitating communication of thought across human language barriers, instructional text and verbal conveying of APL subjects requires human language translations of the [[glyphs]] and [[primitive function|primitives]] etc. This article attempts to provide a standard for German terminology used in such contexts, to ease the burden of translators, assist speakers, and in general lessen the risk of misunderstandings in conversation.<br />
<br />
At the 2020 [[APL Germany]] meeting, Michael Baas described the motivation behind a German terminology standard and launched a survey to measure the importance of this.<ref>Dieter Kilsch. [https://apl-germany.de/apl-germany-gse-herbsttagung-2020/ APL Germany / GSE Herbsttagung 2020]. November 10th, 2020.</ref> APL Germany subsequently published an article detailing this.<ref>Baas, M. [https://apl-germany.de/deutsches-apl/ Deutsches APL] (in German). APL Germany. November 24th, 2020.</ref><br />
<br />
== Translations ==<br />
This list is incomplete. Please [{{fullurl:{{PAGENAME}}|action=edit}} edit] this page to contribute, keeping the list in alphabetical order by primary English term. The primary English term is the corresponding article name (which should be linked) if an article exists. Use the [[{{TALKPAGENAME}}|Discussion]] page to remark about translations you disagree with, or to provide suggestions for otherwise improving this page. When a translation has historical or external precedent, please add a reference to that.<br />
<br />
{| class=wikitable id="dtwords"<br />
! Primary term !! Translation<br />
|-<br />
| [[Array]] || Feld<ref>German Wikipedia: [https://de.wikipedia.org/wiki/Feld_(Datentyp) Feld (Datentyp)]</ref><br />
|-<br />
| Atop ||<br />
|-<br />
| Backslash || Gegenschrägstrich, Backslash<br />
|-<br />
| [[Beside]] || Neben<ref name="mbaas">Suggested by Michael Baas</ref><br />
|-<br />
| Character vector || Zeichenvektor<br />
|-<br />
| Case folding || [[{{TALKPAGENAME}}#Case_folding|Case folding]]<ref name="mbaas"/><br />
|-<br />
| [[Catenate]] || Verbinde, Verkette<ref name="Lochner">Hans Lochner: APL2 Handbuch</ref>, Konkatenieren<ref name=dewp>German Wikipedia: [https://de.wikipedia.org/wiki/APL_(Programmiersprache) APL (Programmiersprache)]</ref><br />
|-<br />
| [[Circle]] || Kreis(Funktion)<br />
|-<br />
| [[Comma bar]] || Komma-Strich<ref name="mbaas"/><br />
|-<br />
| [[Compose]] || Komponiere<br />
|-<br />
| Compositional operators ''(see [[Function composition]])'' || Kompositions-Operatoren<br />
|-<br />
| Compress ''(see [[Replicate]])'' || Komprimieren ''(Replicate/Replizieren sinnvoller)''<br />
|- <br />
| [[Derived function]] || Abgeleitete Funktionen<ref name=dewp/><br />
|-<br />
| [[Disclose]] || Auspacken<br />
|-<br />
| [[Dyadic]] || Dyadisch (Zweistellig<ref name="Lochner" />)<br />
|- <br />
| [[Each]] ||<br />
|-<br />
| [[Enclose]] || [[{{TALKPAGENAME}}#Enclose_/_Disclose|Einpacken]]<br />
|-<br />
| [[Execute]] || [https://aplwiki.com/wiki/Talk:German_terminology#Execute Ausführen]<br />
|-<br />
| [[Fork]] || Gabel (Dreierzug)<br />
|-<br />
| [[Format]] (Funktion) || Deaktivieren<ref name="Lochner" /><br />
|-<br />
| [[Function composition|(Function) composition]] || Komposition<ref>German wikipedia: [https://de.wikipedia.org/wiki/Komposition_(Mathematik) Komposition (Mathematik)]</ref><br />
|-<br />
| [[Grade]] || Sortierindex<ref name="Lochner" /><br />
|-<br />
| [[Grade Down]] || Sortierindex, fallend<ref name="Lochner" /><br />
|-<br />
| [[Grade Up]] || Sortierindex, steigend<ref name="Lochner" /><br />
|-<br />
| [[Guard]] || Wache <ref name="mbaas" /><br />
|-<br />
| [[Jot]] || Kringel<ref>German Wikipedia: [https://de.wikipedia.org/wiki/Komposition_(Mathematik)#Definition Komposition (Mathematik)]</ref><br />
|-<br />
| [[Key]] || Leiter<ref name="abrudz" /><br />
|-<br />
| [[Label]] || Sprungmarke, Zeilenmarke<br />
|-<br />
| [[Laminate]] || Schichten<br />
|-<br />
| Lamp || Lampe<ref name=dewp/><br />
|-<br />
| [[Left]] || Links<br />
|-<br />
| [[Major cells]] ||<br />
|-<br />
| [[Monadic]] || Monadisch (Einstellig<ref name="Lochner" />)<br />
|-<br />
| [[Namespace]] || Namensraum<ref name=dewp/><br />
|-<br />
| N-wise || N-fach<br />
|-<br />
| [[Nest]] || [[{{TALKPAGENAME}}#Nested|Nesten]]<br />
|-<br />
| [[Niladic]] || Niladisch (Nullstellig<ref name="Lochner" />)<br />
|-<br />
| [[Over]] ||<br />
|-<br />
| [[Pick]] || Entnehme<br />
|-<br />
| [[Quad]] || Fenster<br />
|-<br />
| [[Quote-quad]] || Fenster mit Griff (?)<br />
|-<br />
| [[Rank]] || Rang<br />
|-<br />
| [[Ravel]] || Aufreihen<ref name="Lochner" /><br />
|-<br />
| [[Reduce]] || Reduziere<br />
|-<br />
| [[Reduction]] || Reduktion<br />
|-<br />
| [[Replicate]] || Replizieren<br />
|-<br />
| [[Reverse]] || Spiegeln<ref name="Lochner" /><br />
|-<br />
| [[Right]] || Rechts<br />
|-<br />
| [[Rotate]] || Rotieren<ref name="Lochner" /><br />
|-<br />
| Quad || [[{{TALKPAGENAME}}#Quad|Fenster]]<br />
|-<br />
| Quad Diamond || Fenster-Karo<ref name="abrudz" /> (Symbol)<br />
|-<br />
| [[Quote]] || Hochkomma<br />
|-<br />
| [[Quote-Quad]] || Fenster-Hochkomma<br />
|-<br />
| Shoe (Left {{~}}, [[Right Shoe|Right {{~}}]]) || Schuh (Linker {{~}}, Rechter {{~}})<br />
|-<br />
| [[Signum]] || Vorzeichen, Signum<br />
|-<br />
| Slash || Schrägstrich, Slash<br />
|-<br />
| Slash-bar || Schräg- und Querstrich (?)<br />
|-<br />
| Stranding ||<br />
|-<br />
| [[Stencil]] (operator) || Schablone<ref name="abrudz">Suggested by [[Adám Brudzewsky]]</ref> (Operator)<br />
|-<br />
| [[Tacit]] (function) || Implizit (e Funktion)<br />
|-<br />
| Tack (Left {{~}}, Right {{~}}) || [[{{TALKPAGENAME}}#Tack|Stift]] (Linker {{~}}, Rechter {{~}})<br />
|-<br />
| [[Thorn]] || Dorn<br />
|-<br />
| [[3-Train]] || Dreierzug <br />
|-<br />
| (Function) [[Train]] || [[{{TALKPAGENAME}}#Train|Zug]] <br />
|-<br />
| [[2-Train]] || Zweierzug<br />
|-<br />
| [[Transpose]] || Transponieren<br />
|-<br />
| [[Unique]] || Unikat<br />
|-<br />
| [[Unique Mask]] || Unikat-Maske<br />
|-<br />
| [[Without]] || Eliminiere (Ohne?)<br />
|-<br />
| [[Workspace]] || Arbeitsbereich<br />
|-<br />
|}<br />
<br />
== References ==<br />
<references/><br />
<br />
{{APL development}}[[Category:Lists]]</div>Adám Brudzewskyhttps://aplwiki.com/wiki/Backwards_compatibilityBackwards compatibility2020-10-23T20:41:58Z<p>Marshall: Add scope section and move error message discussion there</p>
<hr />
<div>In APL design, '''backwards compatibility''' is the practice of ensuring that older codebases or systems are able to work with new APL dialects, versions, or libraries. Since its early development, APL—and in particular widely used commercial dialects—has had a strong emphasis on backwards compatibility. However, there have also been several significant languages that retain core APL ideas while breaking compatibility, including [[Ken Iverson|Iverson]]'s own [[J]]. Ideas from these languages are sometimes incorporated back into mainstream, backwards-compatible APLs.<br />
<br />
APL dialects that emphasize backward compatibility typically apply greater caution when designing features in order to preserve the possibility for extension in the future, and may even consider [[wikipedia:forward compatibility|forward compatibility]]—the ability for an older system to work, or fail safely, with newer features—when designing. Features designed with less care in the past may cause language inconsistencies in the future indefinitely. For example, [[Membership]]'s behavior on high-rank arrays is incompatible with and less useful than other [[high-rank set functions]], but extending it in the new way would break too much existing code for commercial APLs to consider it.<br />
<br />
== Scope ==<br />
<br />
Different features in an APL implementation are usually subject to different levels of backwards compatibility constraint. The results of primitives, and the meaning of syntax, are always considered the most important to maintain, while [[system function]]s are often handled more loosely and [[I-beam]]s or [[user command]]s may have very low backwards compatibility requirements.<br />
<br />
The specific [[error message]]s produced by any given error is considered less important keep constant. The standards indeed leave it up to the implementations too decide the order in which various aspects of code validity is checked. For example <source lang=apl inline>'ABC'×1 2 3 4</source> could be a [[LENGTH ERROR]] (3 vs. 4 elements) or a [[DOMAIN ERROR]] (attempting to multiply characters). Implementations are known to change the precedence of such errors.<br />
<br />
Errors can disappear altogether when the domains of [[primitive]]s are extended, or additional syntax is added. For example, it is common practice to insert a deliberate error into a function, in order to force execution to halt, and the tracing interface to appear. The traditional way to do so was to insert a line with one a function on it. The [[FinnAPL idiom library]] includes<br />
:{|class=wikitable style="background-color: #EBEBEB"<br />
|rowspan=2| 738. || Syntax error to stop execution ||style="text-align: right;"|<source lang=apl inline></source><br />
|-<br />
|colspan=2 style="background-color: #F5F5F5"|<source lang=apl inline>*</source><br />
|}<br />
but this will simply print <source lang=apl inline>*</source> in dialects that [[Tacit_programming#Primitives|allow primitive functions to be named]]. Another common phrase was <source lang=apl inline>***</source> as this is easy to search for while being exceedingly unlikely to appear in code. However, with the adoption of [[train]]s, this too became valid, and is likely to print verbatim rather than stop execution. [[APLcart]] includes <source lang=apl inline>...</source> for the same purpose, relying on the continued prohibition against immediately adjacent [[dyadic operator]]s other than for [[outer product]] (<source lang=apl inline>∘.g</source>).<br />
<br />
== Dialects ==<br />
<br />
APL dialects that historically have strongly emphasized backwards compatibility include:<br />
* The [[IBM]] progression of APLs including [[APL\360]], [[APL.SV]], and [[APL2]]<br />
* [[APL*PLUS]] relative to IBM APLs<br />
* [[SHARP APL]]: for example [[Syracuse University]] chose SHARP over other dialects because of its superior compatibility with APL*PLUS<br />
* [[Dyalog APL]], particularly in the 1990s and later<br />
* [[GNU APL]] relative to [[ISO/IEC_13751:2001]]<br />
* [[Extended Dyalog APL]] relative to Dyalog, although this compatibility was broken by Dyalog [[Dyalog APL 18.0|version 18.0]]'s addition of [[Unique Mask]].<br />
<br />
In the 1970s and early 1980s it was common to create new APL implementations to run on new hardware. These implementations almost always shared the primitive set of [[APL.SV]] or another IBM APL, but often developed new [[system function]]s or other peripheral functionality to better match the host system.<br />
<br />
Even the languages listed above may make changes to existing behavior. [[APL2]] broke from [[APL\360]] by promoting [[bracket indexing]] to higher precedence than [[stranding]], a decision that wasn't taken up by its contemporary [[Dyalog APL]], but was shared by some later dialects including [[APLX]] and [[GNU APL]]. More recently, [[Dyalog APL 13.0]] broke compatibility for the [[Power]] function while introducing [[complex number]]s, which were controversial feature for that and other reasons.<br />
<br />
Notable APL dialects or offshoots that discard backwards compatibility with APL in significant ways include:<br />
* [[Ken Iverson|Iverson]]'s papers [[Rationalized APL]] and [[A Dictionary of APL]]<br />
* [[A+]], primarily because [[leading axis theory]] allows primitives to be removed or simplified<br />
* [[J]] to use only the [[wikipedia:ASCII|ASCII]] character set, [[leading axis theory]], and other primitive changes<br />
* [[APL#]] to support [[.NET]]-based features and unify function definition<br />
* [[dzaima/APL]] to remove [[function-operator overloading]] and improve specific primitives<br />
* [[APL\iv]] to simplify syntax (making parsing easier) and the array model<br />
* [[BQN]] for numerous reasons including [[leading axis theory]], redesigned [[glyph]]s, and removing implicit [[stranding]]<br />
<br />
Of these, [[J]] has built a large enough user base to develop its own backwards compatibility concerns, even though early J design was fairly loose with respect to backwards compatibility. Beginning with version 8.07 in 2018 it has removed various features that are considered less important.<br />
<br />
Newer and less commercial APLs such as [[APL\iv]], [[April]], or [[ngn/apl]] tend to be less focused on backwards compatibility than historical ones. These dialects tend to take most design choices from a well-known APL such as [[Dyalog APL]] or [[GNU APL]], but make small breaks for experimentation or address particular issues. They typically do not support features that were historically important but are now rarely used, such as [[shared variables]] or [[Branch]], and may discard features that are still in use but have an adequate replacement, for example removing [[tradfn]]s in favor of [[dfn]]s.<br />
<br />
== External links ==<br />
<br />
* [[wikipedia:Backward compatibility|Backward compatibility]]<br />
* [https://github.com/abrudz/KINGDOM KINGDOM] (an example of the minimal changes necessary for an [[APL\360]] game to modern [[Dyalog APL]] and serving it as a web app)<br />
{{Template:APL development}}[[Category:APL history]][[Category:Culture]]</div>Marshallhttps://aplwiki.com/wiki/MnemonicsMnemonics2020-10-16T10:57:29Z<p>MichaelBaas: /* Pairing glyphs with their meaning */</p>
<hr />
<div>__FORCETOC__<br />
'''Mnemonics''' can assist with [[learning resources|learning]] the meaning of APL [[glyph]]s and where on they keyboard they are found for [[typing glyphs|typing them]]. Both of these skills are essential for an effective APL programmer. This article provides such aide-mémoires.<br />
== Pairing glyphs with their meaning ==<br />
<br />
Many glyphs have meaning [[Comparison_with_traditional_mathematics#Identical|identical to their mathematical counterparts]].<br />
<br />
<source lang=apl inline>⋄</source> (Diamond) separates statements. That is, no functions or operators can break through <source lang=apl inline>⋄</source>, just as diamonds are virtually indestructible.<br />
<br />
<source lang=apl inline>⌺</source> looks like a <source lang=apl inline>⋄</source>-shaped [[Stencil]] laid on a piece of paper, <source lang=apl inline>⎕</source>.<br />
<br />
<source lang=apl inline>!</source> is [[Binomial]] in addition to [[Factorial]], as the two are closely related.<br />
<br />
[[File:I beam HEB 100.png|thumb|[[I-beam]] <source lang=apl inline>⌶</source> does look like an [[wikipedia:I-beam|I-beam]]]]<br />
<source lang=apl inline>⌶</source> ([[I-beam]]) calls system services. APL was originally developed at [[IBM]], so system services were also IBM services. <source lang=apl inline>⌶</source> is an [[wikipedia:I-beam|I-beam]] and ''I-beam'' is pronounced almost identically to ''IBM''.<br />
<br />
<source lang=apl inline>@</source> applies a function or substitutes elements ''[[at]]'' specific locations.<br />
<br />
[[File:Bristol Type 223 top-view silhouette.png|thumb|The [[Grade]] glyphs <source lang=apl inline>⍋</source> and <source lang=apl inline>⍒</source> look like [[wikipedia:supersonic transport|supersonic transport]]s.]]<br />
<source lang=apl inline>⍋</source> and <source lang=apl inline>⍒</source> give the indices ([[grade]]s) needed to sort ascending and descending respectively, and look like an ascending and descending supersonic transport, respectively.<br />
<br />
<source lang=apl inline>⌽</source>, <source lang=apl inline>⊖</source>, and <source lang=apl inline>⍉</source> [[reverse]] or [[transpose]] an array over a given [[axis]]. The <source lang=apl inline>○</source> part of the glyphs symbolise the array, while the line component (<source lang=apl inline>|</source>, <source lang=apl inline>\</source>, or <source lang=apl inline>-</source>) indicates the line across which the reversal/transposal is done.<br />
<br />
[[File:TreeLog.jpg|thumb|The [[Log]] glyph <source lang=apl inline>⍟</source> looks like a tree log.]]<br />
<source lang=apl inline>⍟</source> looks like the cross-section of a tree [[log]]<br />
<br />
<source lang=apl inline>⍱</source> and <source lang=apl inline>⍲</source> ([[Nor]] and [[Nand]]) have the [[Not]] glyph <source lang=apl inline>~</source> on top of or overlaid on the [[Or]] glyph <source lang=apl inline>∨</source> and [[And]] glyph <source lang=apl inline>∧</source> respectively.<br />
<br />
<source lang=apl inline>×</source> can be seen as an <math>x</math> when monadic, indicating the unknown [[sign]] to be determined.<br />
<br />
<source lang=apl inline>+</source> negates the imaginary part (that is, it [[conjugate]]s) by analogy to monadic <source lang=apl inline>-</source> which negates both the real and the imaginary parts.<br />
<br />
<source lang=apl inline>÷</source> takes a default left argument of <source lang=apl inline>1</source> (thus computing the [[reciprocal]]), that being the [[identity element]] of [[division]].<br />
<br />
<source lang=apl inline>⌹</source> is [[matrix divide]] with a <source lang=apl inline>⎕</source> symbolising a matrix and an inscribed <source lang=apl inline>÷</source> for "divide".<br />
<br />
<source lang=apl inline>?</source> symbolises the unknown, and thus [[roll]]s dice and [[deal]]s cards randomly.<br />
<br />
<source lang=apl inline>⍺</source> and <source lang=apl inline>⍵</source> are the leftmost and rightmost letters of the [[wikipedia:Greek alphabet|Greek alphabet]]. They therefore denote the left and right arguments of [[dfn]]s, respectively.<br />
<br />
<source lang=apl inline>∊</source> is the Greek letter [[Epsilon]] which corresponds to the letter ''E'' for [[Enlist]] and [[Element of]].<br />
<br />
<source lang=apl inline>⍴</source> is the Greek letter [[Rho]] which corresponds to the letter ''R'' for [[Reshape]].<br />
<br />
<source lang=apl inline>~</source> is [[Not]] when monadic, but its dyadic form, [[Without]], can also be remembered as ''but not''.<br />
<br />
<source lang=apl inline>⍨</source> is a monadic operator that looks like a face. When its derived function is applied monadically, it can be called ''[[self]]ie'', in that it applies the operand function to the argument with the argument itself as left argument too.<br />
<br />
<source lang=apl inline>↑</source> and <source lang=apl inline>↓</source> ([[Mix]] and [[Split]]) increase and decrease rank (if possible) when used monadically.<br />
<br />
<source lang=apl inline>↓</source> [[drop]]s elements, and so it points down, the direction in which things are dropped. Take uses <source lang=apl inline>↑</source> by analogy.<br />
<br />
<source lang=apl inline>⍳</source> is the Greek letter [[Iota]] which corresponds to the letter ''I'' for [[Index generator]] and [[Index of]].<br />
<br />
<source lang=apl inline>⍸</source> is also the Greek letter [[Iota]] which corresponds to the letter ''I'' for [[Indices]] and [[Interval Index]].<br />
<br />
<source lang=apl inline>○</source> is a circle for [[Circular]] functions and the ratio between the circumference and the diameter of a circle, [[Pi times|Pi]].<br />
<br />
<source lang=apl inline>⍥</source> and <source lang=apl inline>⍤</source> ([[Over]] and [[Atop]]) both apply the left operand after the right operand. However, <source lang=apl inline>⍥</source> has a larger "circle of influence" in that it applies the its right operand twice (once on each argument) while <source lang=apl inline>⍤</source> only applies it once (between the arguments).<br />
<br />
<source lang=apl inline>*</source> and <source lang=apl inline>⍣</source> repeatedly apply multiplication and a function, respectively. The star symbolises [[power (function)]]/[[power (operator)]].<br />
<br />
<source lang=apl inline>←</source> [[assign]]s by putting the value on its right into the name on its left.<br />
<br />
<source lang=apl inline>→</source> points at the destination it is [[branch]]ing to.<br />
<br />
<source lang=apl inline>⍬</source> ([[Zilde]]) is a combination of <source lang=apl inline>~</source> for [[Without]] and <source lang=apl inline>0</source> indicating numbers. Indeed, it is the "vector without numbers", equivalent to <source lang=apl inline>0~0</source>.<br />
<br />
<source lang=apl inline>⊣</source> and <source lang=apl inline>⊢</source> point a finger towards the [[left]] and [[right]], which are exactly the argument they, respectively, return.<br />
<br />
[[File:Computer console.jpg|thumb|The [[Quad]] glyph <source lang=apl inline>⎕</source> looks like a console.]]<br />
<source lang=apl inline>⎕</source> is the prefix for all [[system name]]s, and also also manages input from the console as well as output to the console. For that, it is a stylised console. <source lang=apl inline>⍞</source> looks like a <source lang=apl inline>⎕</source> with a quote <source lang=apl inline>'</source> indicating [[string]] input and message output.<br />
<br />
<source lang=apl inline>⌈</source> and <source lang=apl inline>⌊</source> are pictograms of a wall with a piece of [[ceiling]] and [[floor]], respectively.<br />
<br />
<source lang=apl inline>⌈</source> and <source lang=apl inline>⌊</source> can also be seen as indicators on a vertical number line, pointing at the [[maximum]] and [[minimum]], respectively.<br />
<br />
<source lang=apl inline>∇</source> is an upside-down Greek [[Delta]], which corresponds to the letter ''D'' for [[Defined function]] or (own) definition (for recursion).<br />
<br />
<source lang=apl inline>⌸</source> ([[Key]]) applies a function for each collection of all elements that are [[equal]] (<source lang=apl inline>⌸</source>).<br />
<br />
<source lang=apl inline>≡</source> can be see as a stack of layers. When used monadically, it finds the [[depth]] of an array.<br />
<br />
<source lang=apl inline>≢</source> looks like a [[tally]] mark.<br />
<br />
<source lang=apl inline>⊂</source> [[enclose]]s its argument in a layer of nesting, and [[Disclose]] uses <source lang=apl inline>⊃</source> by analogy. <source lang=apl inline>⊆</source> is exactly like <source lang=apl inline>⊂</source> except that it only does a [[conditional enclose]], namely only if the argument is [[simple]].<br />
<br />
<source lang=apl inline>⊂</source> and <source lang=apl inline>⊆</source> enclose at specific locations, per a specification, so their dyadic forms are [[Partitioned enclose]] and [[Partition]], respectively.<br />
<br />
<source lang=apl inline>∪</source> is a styled letter ''U'' for [[Unique] or [[Union]] if used dyadically.<br />
<br />
<source lang=apl inline>⊥</source> looks like the [[base]] of a pillar. [[Antibase]] uses <source lang=apl inline>⊤</source> by analogy.<br />
<br />
<source lang=apl inline>⍝</source> looks like a [[filament lamp]] and provides enlightenment by indicating [[comment]]s.<br />
<br />
<source lang=apl inline>,</source> [[concatenate]]s arrays, much like the common punctuation symbol concatenates phrases. <source lang=apl inline>⍪</source> has an added styled row, indicating that for matrices, it concatenates additional rows.<br />
<br />
<source lang=apl inline>.</source> is just a low dot, but performs the same operation (though generalised) as [[traditional mathematics]]' [[wikipedia:dot product|dot product]].<br />
<br />
<source lang=apl inline>/</source> and <source lang=apl inline>⌿</source> are also called "by" which can be remembered as reduce by.<br />
<br />
== Pairing glyphs/functionality with their keyboard locations ==<br />
:''This list is incomplete; you can help by [{{fullurl:{{FULLPAGENAME}}|action=edit&section=2}} expanding it].''<br />
Below is a US English APL keyboard layout (from [[Dyalog APL]]), annotated with short mnemonics. Some of the mnemonics are then fully explained.<br />
<br />
{{#css:.image img{width:100%;height:auto}}[[File:Keyboard Mnemonics.png]]<br />
<br />
<source lang=apl inline>⋄</source> begins new APL expressions just like <kbd>`</kbd> button begins the main section of the keyboard.<br><br />
<source lang=apl inline>⌺</source> is a modified version of <source lang=apl inline>⌺</source>, so it is <kbd>Shift</kbd>+<source lang=apl inline>⋄</source>.<br />
<br />
<source lang=apl inline>¨</source> applies a function to each 1 of the argument elements, so it is on <kbd>APL</kbd>+<kbd>1</kbd>.<br><br />
<source lang=apl inline>⌶</source> looks like a [[wikipedia:Roman numerals|Roman numeral]] 1, so it also lives on the <kbd>1</kbd>.<br />
<br />
<source lang=apl inline>¯</source>, <source lang=apl inline><</source>, <source lang=apl inline>≤</source>, <source lang=apl inline>=</source>, <source lang=apl inline>≥</source>, <source lang=apl inline>></source>, and <source lang=apl inline>≠</source> form a block. The number line 1–9 (because 0 on the far right) is split into two [[equal]] halves by <kbd>5</kbd> so that gives <source lang=apl inline>=</source>. <kbd>4</kbd> and <kbd>6</kbd> are slightly less and more, respectively, so they give <source lang=apl inline>≤</source> and <source lang=apl inline>≥</source>. <kbd>3</kbd> and <kbd>7</kbd> are much less and more, respectively, so they give <source lang=apl inline><</source> and <source lang=apl inline>></source>. Finally, <kbd>2</kbd> is so much less that it is negative, giving the negative sign <source lang=apl inline>¯</source>, and <kbd>8</kbd> is so much greater that it is completely [[not equal|unequal]], <source lang=apl inline>≠</source>.<br />
<br />
{{APL development}}{{APL glyphs}}<br />
[[Category:APL character set]]</div>Adám Brudzewsky