Tacit programming: Difference between revisions
Line 95: | Line 95: | ||
=== Component of a vector in the direction of another vector === | === Component of a vector in the direction of another vector === | ||
Sometimes a train can make an expression nicely resemble its equivalent definition in | Sometimes a train can make an expression nicely resemble its equivalent definition in traditional mathematical notation. As an example, here is a program to compute the component of a vector <math>\textbf{a}</math> in the direction of another vector <math>\textbf{b}</math>: | ||
:::<math>\textbf{a}_\textbf{b} = (\textbf{a}\cdot\hat{\textbf{b}})\hat{\textbf{b}}</math> | |||
< | |||
<math>\textbf{a}_\textbf{b} = (\textbf{a}\cdot\hat{\textbf{b}})\hat{\textbf{b}}</math> | |||
<source lang=apl> | <source lang=apl> | ||
Root ← *∘÷⍨ ⍝ Nth root | |||
Norm ← | Norm ← 2 Root +.×⍨ ⍝ Magnitude (norm) of numeric vector in Euclidean space | ||
Unit ← | Unit ← ⊢÷Norm ⍝ Unit vector in direction of vector ⍵ | ||
InDirOf ← (⊢×+.×)∘Unit ⍝ Component of vector ⍺ in direction of vector ⍵ | InDirOf ← (⊢×+.×)∘Unit ⍝ Component of vector ⍺ in direction of vector ⍵ | ||
3 5 2 InDirOf 0 0 1 ⍝ Trivial example | 3 5 2 InDirOf 0 0 1 ⍝ Trivial example | ||
0 0 2 | 0 0 2 | ||
</source> | </source> | ||
For a more parallel comparison of the notations, see the [[Comparison_with_traditional_mathematics#Practical_example|comparison with traditional mathematics]]. | |||
{{APL syntax}} | {{APL syntax}} |
Revision as of 14:00, 9 January 2020
Tacit functions apply to implicit arguments following a small set of rules. This is in contrast to the explicit use of arguments in dfns (⍺ ⍵
) and tradfns (which have named arguments). Known dialects which implement trains are Dyalog APL, dzaima/APL, ngn/apl and NARS2000.
Primitives
All primitive functions are tacit. Some APLs allow primitive functions to be named.
plus ← + times ← × 6 times 3 plus 5 48
Derived functions
Functions derived from an operator and operand are tacit.
sum ← +/ sum ⍳10 55
Trains
A train is a series of functions in isolation. An isolated function is either surrounded by parentheses or named. Arguments are processed by the following rules:
A 2-train is an atop:
(g h) ⍵ ⬄ g ( h ⍵) ⍺ (g h) ⍵ ⬄ g (⍺ h ⍵)
A 3-train is a fork:
(f g h) ⍵ ⬄ ( f ⍵) g ( h ⍵) ⍺ (f g h) ⍵ ⬄ (⍺ f ⍵) g (⍺ h ⍵)
The left tine of a fork (but not an atop) can be an array:
(A g h) ⍵ ⬄ A g ( h ⍵) ⍺ (A g h) ⍵ ⬄ A g (⍺ h ⍵)
Examples
One of the major benefits of tacit programming is the ability to convey a short, well-defined idea as an isolated expression. This aids both human readability (semantic density) and the computer's ability to interpret code, potentially executing special code for particular idioms.
Plus and minus
(+,-)2 2 ¯2 1 2 3 (+,-) 4 5 6 7 ¯3 ¯2 ¯1 (2 3⍴0) (+,-) 1 1 1 1 ¯1 ¯1 ¯1 1 1 1 ¯1 ¯1 ¯1
Arithmetic mean
(+⌿÷≢) ⍳10 ⍝ Mean of the first ten integers 5.5 (+⌿÷≢) 5 4⍴⍳4 ⍝ Mean of columns in a matrix 1 2 3 4
Fractions
We can convert decimal numbers to fractions. For example, we can convert to the improper fraction with
(1∧⊢,÷)2.625 21 8
Alternatively, we can convert it to the mixed fraction with A mixed fraction:
(1∧0 1∘⊤,÷)2.625 2 5 8
Is it a palindrome?
(⌽≡⊢)'racecar' 1 (⌽≡⊢)'racecat' 0
Split delimited text
','(≠⊆⊢)'comma,delimited,text' ┌─────┬─────────┬────┐ │comma│delimited│text│ └─────┴─────────┴────┘ ' '(≠⊆⊢)'space delimited text' ┌─────┬─────────┬────┐ │space│delimited│text│ └─────┴─────────┴────┘
Component of a vector in the direction of another vector
Sometimes a train can make an expression nicely resemble its equivalent definition in traditional mathematical notation. As an example, here is a program to compute the component of a vector in the direction of another vector :
Root ← *∘÷⍨ ⍝ Nth root Norm ← 2 Root +.×⍨ ⍝ Magnitude (norm) of numeric vector in Euclidean space Unit ← ⊢÷Norm ⍝ Unit vector in direction of vector ⍵ InDirOf ← (⊢×+.×)∘Unit ⍝ Component of vector ⍺ in direction of vector ⍵ 3 5 2 InDirOf 0 0 1 ⍝ Trivial example 0 0 2
For a more parallel comparison of the notations, see the comparison with traditional mathematics.