A dfn (pronounced “dee-fun” with a very short “u” sound) is a way of writing functions in APL. It starts and ends with curly braces {}
, has a right argument with ⍵
(omega) and an optional left argument ⍺
.
3{⍺}5 ⍝ ⍺ is the (optional) left argument
3
{⍵}'apl' ⍝ ⍵ is the right argument
apl
{⍺}5 ⍝ Calling a dyadic function monadically results in an error
VALUE ERROR
{⍺}5
∧
3{⍵} ⍝ Calling a function without a right argument results in an error
SYNTAX ERROR: Missing right argument
3{⍵}
∧
Names are assigned with the left arrow ←
. We say “name gets [function or array]”.
one←1
three←3
equals←=
plus←+
four←4
four equals one plus three ⍝ 1 means true, 0 means false
1
We can use a name in the same line in which it is defined. In production code it is best to avoid this unless an expression is very short.
⍝ Squared numbers divided by the sum of squares
squared÷+/squared←¯1 0 1 2*2
0.1666666667 0 0.1666666667 0.6666666667`
Without using the tally ≢
or shape ⍴
functions, create a function named Tally
which returns the number of elements in a vector.
Tally 1 2 4 523 1 2 454
7
Create a function named Mean
which returns the mean average of a numeric vector.
Mean 1 2 4 523 1 2 454
141
Using ⌊
(“floor” i.e. round down), create a function IsDivisibleBy
which returns 1
if ⍺
is divisible by ⍵
and 0
otherwise.
15 IsDivisibleBy 5
1
15 IsDivisibleBy 6
0
12 IsDivisibleBy ⍳12
1 1 1 1 0 1 0 0 0 0 0 1
Mod
is a dyadic function which returns the remainder after its right argument ⍵
number is divided by the left argument ⍺
.
16÷5
3.2
5 Mod 16 ⍝ 3 5s and 1 left over
1
0.2×5 ⍝ 0.2 5s left over
1
12 Mod 30
6
13 Mod 56
4
5 Mod 30 ⍝ 5 goes into 25 exactly 6 times
0
Write the Mod
function as a dfn.
Write a function named Split
which takes a fractional number and returns two numbers: its integer and fractional parts.
Split 0
0 0
Split ¯10
¯10 0
Split 7.62
7 0.62
What Was In That Vector Again?
You should have a variable named ⎕AVU
in your workspace, from Part 1.
How many even numbers are there in ⎕AVU
?
Answer: 132
What percentage of numbers in ⎕AVU
are odd numbers?
Answer: 48.4375
What percentage of numbers in ⎕AVU
are strictly negative?
Answer: 0
What percentage of numbers in ⎕AVU
are strictly positive?
Answer: 99.609375
What do you notice about the percentage of strictly positive and negative numbers?
Prime Time
A prime number is divisible only by itself and 1
.
Write a dfn which returns 1
if its argument is prime and 0
otherwise.
IsPrime 21
0
IsPrime 17
1