4,577
edits
No edit summary |
|||
Line 7: | Line 7: | ||
A simple [[dyadic function]]: | A simple [[dyadic function]]: | ||
<source lang=apl> | <source lang=apl> | ||
∇ r←l Tradfn r | ∇ r←l Tradfn r | ||
⍝ ...do something | |||
r←l r | |||
∇ | ∇ | ||
</source> | </source> | ||
{{Works in|[[Dyalog APL]], [[APL2]], [[GNU APL]], [[NARS2000]], [[APLX]], and every older APL from [[APL\360]]}} | {{Works in|[[Dyalog APL]], [[APL2]], [[GNU APL]], [[NARS2000]], [[APLX]], and every older APL from [[APL\360]]}} | ||
Line 16: | Line 16: | ||
An [[ambivalent function]] with an optional left argument, a conditional [[control structure]], one local variable, and a [[#Shyness|shy]] result: | An [[ambivalent function]] with an optional left argument, a conditional [[control structure]], one local variable, and a [[#Shyness|shy]] result: | ||
<source lang=apl> | <source lang=apl> | ||
∇ {res}←{left} AddMult2 right;local | ∇ {res}←{left} AddMult2 right;local | ||
:If 0=⎕NC'left' ⍝ if variable "left" is not defined already | |||
left←0 | |||
:EndIf | |||
local←left+right | |||
res←2×local | |||
∇ | ∇ | ||
AddMult2 3 ⍝ result is "shy" | AddMult2 3 ⍝ result is "shy" | ||
⎕←AddMult2 3 ⍝ coerce display of result | ⎕←AddMult2 3 ⍝ coerce display of result | ||
Line 35: | Line 35: | ||
[[GNU APL]] allows functions and operators to accept an [[function axis|axis]] argument:<ref>[https://www.gnu.org/software/apl/apl.html#Section-3_002e2 3.2 Axis argument in defined functions] – GNU APL Manual</ref> | [[GNU APL]] allows functions and operators to accept an [[function axis|axis]] argument:<ref>[https://www.gnu.org/software/apl/apl.html#Section-3_002e2 3.2 Axis argument in defined functions] – GNU APL Manual</ref> | ||
<source lang=apl> | <source lang=apl> | ||
∇ Z←Average[X] B | ∇ Z←Average[X] B | ||
Z←(+/[X]B) ÷ (⍴B)[X] | |||
∇ | ∇ | ||
Average[1] 5 5⍴⍳25 | Average[1] 5 5⍴⍳25 | ||
11 12 13 14 15 | 11 12 13 14 15 | ||
Line 47: | Line 47: | ||
A [[monadic operator]] and a [[dyadic operator]], both deriving [[monadic function]]s: | A [[monadic operator]] and a [[dyadic operator]], both deriving [[monadic function]]s: | ||
<source lang=apl> | <source lang=apl> | ||
∇ res←(Function SELF) right | ∇ res←(Function SELF) right | ||
res←right Function right | |||
∇ | ∇ | ||
×SELF 1 2 3 4 5 | ×SELF 1 2 3 4 5 | ||
1 4 9 16 25 | 1 4 9 16 25 | ||
∇ res←(FunctionF HOOK FunctionG) right | ∇ res←(FunctionF HOOK FunctionG) right | ||
res←right FunctionF FunctionG right | |||
∇ | ∇ | ||
÷HOOK|2 0 ¯7 | ÷HOOK|2 0 ¯7 | ||
1 1 ¯1 | 1 1 ¯1 | ||
Line 62: | Line 62: | ||
A monadic operator and a dyadic operator, both deriving [[dyadic function]]s: | A monadic operator and a dyadic operator, both deriving [[dyadic function]]s: | ||
<source lang=apl> | <source lang=apl> | ||
∇ res←left (Function SWAP) right | ∇ res←left (Function SWAP) right | ||
res←right Function left | |||
∇ | ∇ | ||
3 2 -SWAP 10 | 3 2 -SWAP 10 | ||
7 8 | 7 8 | ||
∇ res←left (FunctionF OVER FunctionG) right | ∇ res←left (FunctionF OVER FunctionG) right | ||
res←(FunctionG left) FunctionF (FunctionG right) | |||
∇ | ∇ | ||
2 ¯7 2+OVER|¯3 1 4 | 2 ¯7 2+OVER|¯3 1 4 | ||
5 8 6 | 5 8 6 | ||
Line 94: | Line 94: | ||
<source lang=apl> | <source lang=apl> | ||
name←1 2 3 | name←1 2 3 | ||
∇ res←Dummy | ∇ res←Dummy | ||
⎕SHADOW'name' | |||
name←42 | |||
res←name | |||
∇ | ∇ | ||
Dummy | Dummy | ||
42 | 42 | ||
Line 108: | Line 108: | ||
<source lang=apl> | <source lang=apl> | ||
name←1 2 3 | name←1 2 3 | ||
∇ res←Dummy | ∇ res←Dummy | ||
;name | |||
name←42 | |||
res←name | |||
∇ | ∇ | ||
Dummy | Dummy | ||
42 | 42 | ||
Line 123: | Line 123: | ||
A tradfn can return a function value as result. The returned function will replace the function and its arguments (if any) in the calling expression: | A tradfn can return a function value as result. The returned function will replace the function and its arguments (if any) in the calling expression: | ||
<source lang=apl> | <source lang=apl> | ||
∇ Fn←Apply name | |||
:If name≡'plus' | |||
Fn←+ | |||
:ElseIf name≡'times' | |||
Fn←× | |||
:EndIf | |||
∇ | |||
3(Apply'plus')4 | |||
7 | 7 | ||
3(Apply'times')4 | |||
12 | 12 | ||
</source>{{Works in|[[Dyalog APL]]}} | </source>{{Works in|[[Dyalog APL]]}} | ||
Line 139: | Line 139: | ||
The right argument and the result can be a name list instead of single name. The interpreter will unpack the right argument when the function is called, and collect the result when the function returns.<ref>[[Dyalog Ltd.]] Programming Reference Guide. [https://help.dyalog.com/latest/#Language/Defined%20Functions%20and%20Operators/Namelists.htm Namelists].</ref> | The right argument and the result can be a name list instead of single name. The interpreter will unpack the right argument when the function is called, and collect the result when the function returns.<ref>[[Dyalog Ltd.]] Programming Reference Guide. [https://help.dyalog.com/latest/#Language/Defined%20Functions%20and%20Operators/Namelists.htm Namelists].</ref> | ||
<source lang=apl> | |||
∇ (c b a)←Rev(a b c) | |||
∇ | |||
Rev 1 2 3 | |||
3 2 1 | |||
</source>{{Works in|[[Dyalog APL]]}} | |||
== A+ == | == A+ == | ||
[[A+]] uses a reworked style of function and operator definition than maintains the principle of a header that matches the way the function will be used, but differs in many details: | [[A+]] uses a reworked style of function and operator definition than maintains the principle of a header that matches the way the function will be used, but differs in many details: |