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 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 Display of the (tacit) definition of log
10"_ ^. ]
a0=: def=: : 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 def defined above makes their use somewhat more convenient. For example: |
LOG=: 3 def
10 ^. y.
:
x. ^. y.
)
LOG 10
1
2 LOG 32
5
rat=: 2 def
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) Define matrix
one
two
three
)
boxed=: <;._2 (0 : 0) Define boxed list
one
two
three
)
fn=: 3 : 0"1 Assign rank to an explicitly defined function
< +/ y.
)
x=: 3
3 : 0 x 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�
+-------+
|