2E. Explicit Definitions

Explicit definition is convenient for anyone more familiar with conventional programming, particularly that using if-then-else forms. It is also convenient for anyone engaged in extending their mastery of tacit programming: the automatic translation of a one-line explicit definition to tacit form can provide instruction in the reading and writing of tacit expressions. For example:

   log=: 3 : '10 ^. y'
   log 1 10 20 40 100
0 1 1.30103 1.60206 2

   log                  NB. Display of the definition of log
3 : '10 ^. y'

   log=: 13 : '10 ^. y'
   log 1 10 20 40 100
0 1 1.30103 1.60206 2
   log                  NB. Display of the (tacit) definition of log
10"_ ^. ]

a0=: define=: : 0

Adverb for entering explicit definitions

The phrases 1 : 0 and 2 : 0 and 3 : 0 may be used for entering explicit definitions of adverbs, conjunctions, and functions, without entering enclosing quotes. The adverb define defined above makes their use somewhat more convenient. For example:

   LOG=: 3 define
10 ^. y
:
x ^. y
)

 
   LOG 10
1
   2 LOG 32
5

   rat=: 2 define
x&p. % y&p.
)

   1 4 6 4 1 rat 1 2 1
1 4 6 4 1&p. % 1 2 1&p.

   (1 4 6 4 1 rat 1 2 1) i. 6
1 4 9 16 25 36

It is important to recognize that explicit definitions are ordinary J statements (using the conjunction :) , and can be used with other expressions. For example:

   mat=: [;._2 (0 : 0)          NB. Define matrix
one
two
three
)

   boxed=: <;._2 (0 : 0)        NB. Define boxed list
one
two
three
)

   fn=: 3 : 0"1                 NB. Assign rank to an explicitly defined function
< +/ y
)

   arg=: 3
   3 : 0 arg                    NB. Execute unnamed explicit definition
if. 2|y do. 'odd' else. 'even' end.
)
odd
 
   mat
one  
two  
three

   $mat
3 5

   boxed
+-------------+
|one|two|three|
+-------------+

   fn i. 3 4
+-------+
|6|22|38|
+-------+

JPhrases/ExplicitDef (last edited 2009-09-02 22:20:20 by RicSherlock)