JPhrases/AdverbsConjunctions
2D. Adverbs & Conjunctions
Adverbs from Conjunctions
A conjunction together with one of its arguments produces an adverb defined in an obvious way. For example, if a1=: &3 ,then ^ a1 is equivalent to ^&3 (the cube function), and if a2=: 3& then ^ a2 is equivalent to 3&^ (the three-to-the-power function). It is therefore easy to define useful families of adverbs from a conjunction, so easy that it is fruitless to attempt an exhaustive catalogue. The following list is intended to suggest the possibilities in various classes:
a0=: I=: ^:_1 Inverse (^I is ^.) a1=: L=: ^:_ Limit (2&o.L 1 for soln of y=cos y) a2=: LI=: ^:__ Limit of inverse a3=: SQ=: ^:2 Square (1&o.SQ for sine squared) a4=: C=: &o. Family of circular fns (3 C is tangent) a5=: CO=: %@C 3 CO is cotangent m6=: rfd=: 1r180p1&* Radians from degrees m7=: dfr=: rfd I Use dfr=: dfr f. to fix definition a8=: D=: @rfd Try 1 C D 0 30 45 60 90 180 m9=: SIN=: 1&o. D Sine for degree arguments a10=: T=: "2 Try <T I. 2 3 4 3 (BOX TABLES) a11=: S=: ^!. Stope (rising or falling factorial fn etc) a12=: P=: p.!. Stope polynomial .!. Fill for shift (non-cyclic rotate) a14=: FILE=: 1!: File functions (1 FILE for read, etc.)
Explicit Definitions
An adverb or a conjunction can be defined in explicit form. For example:
split=: 2 : ',.@(x@(y&{.) ; x@(y&}.))' ]mm=: i. 5 3 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 (+: split 2 ,. |. split 3 ,. +/ split 2) mm +--------+--------+--------+ |0 2 4 |6 7 8 |3 5 7 | |6 8 10 |3 4 5 | | | |0 1 2 | | +--------+--------+--------+ |12 14 16|12 13 14|27 30 33| |18 20 22| 9 10 11| | |24 26 28| | | +--------+--------+--------+
c15=: split=: 2 : ',.@(x@(y&{.) ; x@(y&}.))' split as defined above d16=: by=: ' '&;@,.@[,.] Verb for use in the table adverb below d17=: over=: ({.;}.)@":@, Verb for use in the table adverb below a18=: table=: 1 :'[ by ]over x/' Try 1 2 3 * table 4 5 6 7
Noun Arguments
Adverbs that apply to a noun argument, and conjunctions that apply to one noun argument and one verb argument are commonplace. For example:
v1=: 0 0 1 1 [ v2=: 0 1 0 1 v1 *. v2 NB. Boolean and 0 0 0 1 v1 1 b. v2 NB. Boolean adverb 0 0 0 1 v1 (i.16) b. v2 NB. All sixteen Boolean functions 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 C=: 1 : 'x&o.' NB. Circle adverb 1 C 0 1r4p1 1r3p1 1r2p1 1p1 NB. Sine function 0 0.7071068 0.8660254 1 0 ^&3 vv=: i. 6 NB. Cube 0 1 8 27 64 125 2 |. !. 1 vv NB. Shift in ones 2 3 4 5 1 1
Conjunctions that apply to two nouns are less familiar, although the definitions of functions in terms of nouns occur frequently in math. For example, a rational function (the quotient of a polynomial a&p. divided by another b&p.) is defined by a pair of coefficients. Thus:
a=: 1 4 6 4 1 [ b=: 1 2 1 RAT=: 2 : 'x&p. % y&p.' a RAT b 1 4 6 4 1&p. % 1 2 1&p. a RAT b vv=: i.6 1 4 9 16 25 36 b RAT a vv 1 0.25 0.111111 0.0625 0.04 0.0277778 (a RAT b * b RAT a) vv 1 1 1 1 1 1
We may also remark that expressions such as 2 x^3^ and 2 x^3^ + 4 x^2^ are commonly used in elementary math to define functions rather than to indicate explicit computation: the x in the foregoing can be construed (and defined) as a conjunction such that 2 x 3 is the function 2:*]^3: . Thus:
ff=: 2 : 'x&* @ (^&y) " 0' 2 ff 3 2&*@(^&3)"0 2 ff 3 vv=: 0 1 2 3 4 5 0 2 16 54 128 250 2 * vv ^ 3 0 2 16 54 128 250 2 3 5 ff 1 2 4 vv 0 0 0 2 3 5 4 12 80 6 27 405 8 48 1280 10 75 3125
The last result above gave the values of the individual terms; in order to obtain their sums (and yet retain the behaviour for a single term), we redefine the conjunction x as follows:
ff=: 2 : '+/ @ (x&* @ (^&y)) " 0' 2 3 5 ff 1 2 4 vv 0 10 96 438 1336 3210 (2 ff 1 + 3 ff 2 + 5 ff 4) vv 0 10 96 438 1336 3210 2 ff 3 vv 0 2 16 54 128 250
c19=: RAT=: 2 : 'x&p. % y&p.' Produces rational function c20=: x=: 2 : '+/ @ (x&* @ (^&y)) " 0' Mimics notation of elementary math c21=: bind=: 2 : 'x @ (y"_)' Binds y to the monad x
It is often convenient to bind an argument to a monad, producing a function that ignores its argument. For example, using wdinfo , a monad that displays its argument in a message box, the definition fini=: wdinfo bind 'Job Finished' produces a function such that fini'' is equivalent to wdinfo 'Job Finished' .