&. dfh
J defines inverses for many functions, and provides various ways of making use of them. The elegant title expression provides an interesting example.
First define:
dfh=. 16. @ ('0123456789ABCDEF'&i.) NB. decimal from hex
hex=. &. dfh
Then:
'FEED' + hex 'B' FEF8 'FF' * hex '101' FFFF
Thus, hex is an adverb which returns a verb that works in hexadecimal.
hex uses the conjunction &. (under). Given
verbs u and v where the inverse v-1 is
defined, then u&.v is equivalent to v-1 u v.
Here are some examples, using &.:
inverse of natural log is the exponential:
3 + &. ^. 4 12
inverse of reciprocal is itself:
am=. +/ % # NB. arithmetic mean hm=. am &. % NB. harmonic mean hm 2 3 5 2.90323
inverse of open is box:
n=. 'winston';(i.3 4);10 20 # &.> n +-+-+-+ |7|3|2| +-+-+-+ $ &.> n +-+---+-+ |7|3 4|2| +-+---+-+ each=. &.> |. each n +-------+---------+-----+ |notsniw|8 9 10 11|20 10| | |4 5 6 7| | | |0 1 2 3| | +-------+---------+-----+
inverse of the binary representation is the base-2 value:
bitwise=. &.#: 5 +. bitwise 6 NB. bitwise OR 7 5 *. bitwise 6 NB. bitwise AND 4 5 ~: bitwise 6 NB. bitwise XOR 3
inverse of transpose is itself:
+/\ i.3 4 NB. accumulate along columns 0 1 2 3 4 6 8 10 12 15 18 21 +/\ &.|: i.3 4 NB. accumulate along rows 0 1 3 6 4 9 15 22 8 17 27 38
^:_1 (power of minus 1). For example, define:
inv=. ^:_1
inverse of add 2 is subtract 2:
+&2 inv 1 2 3 _1 0 1
inverse of sum scan is first differences:
+/\ inv 2 3 5 7 11 2 1 2 2 4
inverse of product scan is rate of increase:
*/\ inv 2 3 5 7 11
2 1.5 1.66667 1.4 1.57143
({.,}.%}:) 2 3 5 7 11
2 1.5 1.66667 1.4 1.57143
inverse of p: determines number of smaller primes:
p: 100000 NB. 100000'th prime
1299721
p: inv 1299721 NB. number of primes less than 1299721
100000
You can define inverses for use with the conjunctions &. and ^:
directly, using the conjunction :. (obverse).
The result of u :. v is a verb that is equivalent to u with an
assigned obverse v.
In general, the term obverse is used instead of inverse, since the defined obverse need not be a true inverse, indeed it may be an unrelated verb.
For example:
%: (*:2) + (*:5) NB. square root of 2^2 + 5^2
5.38516
2 + &. *: 5 NB. same
5.38516
2 +&.(*: :. (^&1r2)) 5 NB. same (inverse of *: is square root)
5.38516
2 +&.(*: :. (^&1r3)) 5 NB. using cube root as obverse
3.07232
Now lets take a closer look at the definition of hex:
dfh=. 16. @ ('0123456789ABCDEF'&i.)
hex=. &. dfh
The inverse of '0123456789ABCDEF'&i. is:
{ & '0123456789ABCDEF'
while the inverse of 16. is:
16 16 ... 16 :
with as many 16's as required.
Also, the inverse of f @ g is g-1 @ f-1
, hence the inverse of dfh can be calculated.
For any verb f:
f hex x <=> f &. dfh x <=> dfh-1 f dfh x