Simple examples: Difference between revisions

Jump to navigation Jump to search
677 bytes added ,  10:44, 28 January 2020
m
Miraheze>Adám Brudzewsky
(10 intermediate revisions by 5 users not shown)
Line 1: Line 1:
This page contains examples that show APL's strengths. The examples require minimal background and have no special dependencies.
This page contains examples that show APL's strengths. The examples require minimal background and have no special dependencies. If these examples are too simple for you, have a look at our [[advanced examples]].
 
== Longer examples ==
A list of more involved examples.
[[Category: Lists]]
 
* [[APL Wiki logo]]
 
* [[Convex Hull]]
 
* [[Conway's Game of Life]]
 
* [[Ranking poker hands]]


== Arithmetic mean ==
== Arithmetic mean ==
Line 40: Line 28:
will transform a list of strings representing words into a comma-separated list:
will transform a list of strings representing words into a comma-separated list:
<source lang=apl>
<source lang=apl>
    {⍺,', ',⍵}⌿'cow' 'sheep' 'cat' 'dog'
      {⍺,', ',⍵}⌿'cow' 'sheep' 'cat' 'dog'
┌────────────────────┐
┌────────────────────┐
│cow, sheep, cat, dog│
│cow, sheep, cat, dog│
Line 61: Line 49:
</source>
</source>


The operator <source lang=apl inline>/</source> can also be used to modify the <source lang=apl inline>(+⌿÷≢)</source> function to produce a moving average.
The operator <source lang=apl inline></source> can also be used to modify the <source lang=apl inline>(+⌿÷≢)</source> function to produce a moving average.
<source lang=apl>
<source lang=apl>
       2 (+⌿÷≢)/ 3 4.5 7 21
       2 (+⌿÷≢)/ 3 4.5 7 21
Line 71: Line 59:
       ave 3 4.5 7 21
       ave 3 4.5 7 21
8.875
8.875
       mave ← ave/
       mave ← ave⌿
       2 mave 3 4.5 7 21
       2 mave 3 4.5 7 21
3.75 5.75 14
3.75 5.75 14
Line 124: Line 112:
</source>
</source>
{{Works in|[[Dyalog APL]], [[NARS2000]], [[dzaima/APL]]}}
{{Works in|[[Dyalog APL]], [[NARS2000]], [[dzaima/APL]]}}
=== Frequency of characters in a string ===
The [[Outer Product]] allows for an intuitive way to compute the occurrence of characters at a given location in a string:
<source lang=apl>
      'abcd' ∘.= 'cabbage'
0 1 0 0 1 0 0
0 0 1 1 0 0 0
1 0 0 0 0 0 0
0 0 0 0 0 0 0
</source>
Then it is simply a matter of performing a sum-reduce <source lang=apl inline>+/</source> to calculate the total frequency of each character:<ref name="Marshall LambaConf 2019">[[Marshall Lochbaum]] used this example as part of his talk on [[Outer Product]] at LambdaConf 2019.</ref>
<source lang=apl>
      +/ 'abcd' ∘.= 'cabbage'
2 2 1 0
</source>


=== Parenthesis nesting level ===
=== Parenthesis nesting level ===
First we compare all characters to the opening and closing characters;
We can expand on the use of <source lang=apl inline>∘.</source> in the above example to perform more complex calculations. First we compare all characters to the opening and closing characters;
<source lang=apl>
<source lang=apl>
       '()'∘.='plus(square(a),plus(square(b),times(2,plus(a,b)))'
       '()'∘.='plus(square(a),plus(square(b),times(2,plus(a,b)))'
Line 145: Line 148:


=== Grille cypher ===
=== Grille cypher ===
A [https://en.wikipedia.org/wiki/Grille_(cryptography) grille] is a 500 year old method for encrypting messages.
A [[wikipedia:grille (cryptography)|grille]] is a 500 year old method for encrypting messages.
[[File:Grille.png|none|500px|frameless|left|The application of a grille cypher]]
[[File:Grille.png|none|500px|frameless|The application of a grille cypher]]
<p>
<p>
Represent both the grid of letters and the grille as character matrices.
Represent both the grid of letters and the grille as character matrices.
Line 170: Line 173:
ILIKEAPL
ILIKEAPL
</source>
</source>
 
===References===
{{APL programming language}}
<references/>
{{APL development}}

Navigation menu