>>  <<  Ndx  Usr  Pri  Phr  Dic  Rel  Voc  !:  wd  Help  Dictionary

Explicit Definition m : n  _ _ _  

As defined and illustrated in Section II H, the phrase s=: 0 : 0 may be used to define s as a script, and the explicit definition conjunction can be further used to produce a dyadic-only verb (4 : s), verb (3 : s), conjunction (2 : s), adverb (1 : s), or noun (0 : s). The left arguments 13 to 10 may be used instead of 3 to 0 to produce equivalent results in tacit form if possible. The right argument 0 may be used in each case to make the corresponding definitions directly from the keyboard: k : 0 is equivalent to k :(0 : 0). Furthermore, the boxed representation b=: <;._2 s or the table representation t=: >b (or t=:[;._2 s) may be used in lieu of the script s in every case. Thus:
   f=: 3 : 0
a=: 2+b=. y. ^ 2
a+a*b
:
x.*x.+y.
)

   a=: b=: 19
   f 3
110

   a,b                        Only the globally assigned name is changed.
11 19
As illustrated by the foregoing:

1.    The definitions of the monadic and dyadic cases produced by 3 : 0 are separated by a colon on a line by itself; if none occurs, the domain of the dyadic case is empty.
2. The explicit result is the result of the last non-test block sentence executed. See Control Structures for the definition of a test block.
3. A name assigned by the copula =. is made local; values assigned to it have no effect on the use of the same name without the entity defined or within other entities invoked by it. A name assigned by =: is global.
4. A locative cannot be localized.
5. The names x. and y. denote the left and right arguments. In defining a conjunction it may be necessary to refer to its left and right arguments (using u. and v.) as well as to the arguments of the resulting function (x. and y.). The use of m. instead of u. restricts the corresponding argument to being a noun, as does the use of n. instead of v. . For example:
   conj=: 2 : '(u. y.)+ (v. y.)'
   mc=: 2 : 0
(u.y.)+(v.y.)
)

   dc=: 2 : 0                 Dyadic case
:
(u.y.)+(v.x.)
)

   (!conj% 2 4 5);(!mc% 2 4 5);(1 2 3 !dc% 2 4 5)
+---------------+---------------+--------------+
|2.5 24.25 120.2|2.5 24.25 120.2|3 24.5 120.333|
+---------------+---------------+--------------+
Control Structures. The sequence of execution of an explicit definition may be determined by control words such as if. do. else. end. and while. . For example, a function to find the root of a function f from a two-element list that brackets the root may be written and executed as follows:
   root=: 3 : 0
m=.+/%#while.~:/y.do.if.~:/*f b=.(m,{.)y.do.y.=.b else.y.=.(m,{:)y.end.end.m y.
)

   f=: 4:-%:
   b=: 1 32
   root b
16
Such a definition may also be written on successive lines by breaking it before or after any control word, and the foregoing definition may be made more readable as follows:
   root=: 3 : 0
m=. +/ % #
while. ~:/y.
   do. if. ~:/*f b=. (m,{.) y.
            do. y.=. b 
          else. y.=. (m,{:) y.
       end.
end. m y.
)
As illustrated by the foregoing, the word if. and a matching end. mark the beginning and end of a control structure, as do while. and a matching end.; such structures may be nested as is the if. structure within the while. structure.

The control words for., if., select., try., while., and whilst. mark the beginnings of control structures that are each terminated by a matching end., and therefore provide a form of punctuation. In the foregoing example, do. and else. break the if. structure into three simple blocks, each comprising a sentence, whereas the do. in the while. structure breaks it into two blocks, the first being a simple sentence, and the second being itself an if. control structure.

In general, a block comprises zero or more simple sentences and control structures. The role of blocks is summarized as follows:

for.     T do. B end.
for_xyz. T do. B end.
if. T do. B end.
if. T do. B else. B1 end.
if. T do. B elseif. T1 do. B1 elseif. T2 do. B2 end.
select. T case. T0 do. B0 fcase. T1 do. B1 case. T2 do. B2 end.
try. B catch. B1 end.
while. T do. B end.
whilst. T do. B end.          Like while., but Skips Test first time.
Words beginning with B or T denote blocks. The last sentence executed in a T block is tested for a non-zero value in its leading atom, and the result of the test determines the block to be executed next. (An empty T block result or an omitted T block tests true.) If an error occurs in a try. block, execution continues in the matching catch. block. The final result is the result of the last sentence executed that was not in a T block, and if there is no such last executed sentence, the final result is i.0 0 .

The behaviour of the remaining control words may be summarized as follows:

assert. T signal assertion failure if T is not all 1s
break. Go to end of for., while., or whilst. control structure
continue. Go to top of for., while., or whilst. control structure
goto_name. Go to label of same name
label_name.     Target of goto_name.
return. Exit the function

Additional explanations and examples can be found in the Control Structures section.

The following example uses control words as well as u. and n. in modelling the Level conjunction L: :
   Level=: 2 : 0
m=. 0{ 3&$&.|. n.
ly=. L. y. if. 0>m do. m=.0>.m+ly end.
if. m>:ly do. u. y. else. u. Level m&.> y. end.
:
'l r'=. 1 2{ 3&$&.|. n.
lx=. L. x.  if. 0>l do. l=.0>. l + lx end.
ly=. L. y.  if. 0>r do. r=.0>. r + ly end.
b=. (l,r)>:lx,ly
if.     b-: 0 0 do. x.    u. Level(l,r)&.>y.
elseif. b-: 0 1 do. x.    u. Level(l,r)&.>y.
elseif. b-: 1 0 do. (<x.) u. Level(l,r)&.>y.
elseif. 1       do. x. u. y.
end.
)

   ] a=: (i.2 3);(<<2 3 4) ; 3
+-----+---------+-+
|0 1 2|+-------+|3|
|3 4 5||+-----+|| |
|     |||2 3 4||| |
|     ||+-----+|| |
|     |+-------+| |
+-----+---------+-+

   +: Level 0 a
+------+---------+-+
|0 2  4|+-------+|6|
|6 8 10||+-----+|| |
|      |||4 6 8||| |
|      ||+-----+|| |
|      |+-------+| |
+------+---------+-+

   +: L: 0 a
+------+---------+-+
|0 2  4|+-------+|6|
|6 8 10||+-----+|| |
|      |||4 6 8||| |
|      ||+-----+|| |
|      |+-------+| |
+------+---------+-+



>>  <<  Ndx  Usr  Pri  Phr  Dic  Rel  Voc  !:  wd  Help  Dictionary