<<     >>

APL Exercises 1
Utilities
 

⎕io←0 throughout.

This set of exercises is on some useful utilities. The ones which are from the dfns workspace and are documented in http://dfns.dyalog.com, for example http://dfns.dyalog.com/n_cmpx.htm.
 

1.0 cmpx

   )copy dfns cmpx
   n←1e5
   cmpx '+/⍳n' '2!n' '2÷⍨n×n-1'
•  Try cmpx on various expressions which give the same results and see how they compare in speed.
cmpx can also return the timings as a numeric result, much more suitable for further manipulations. Try:
   n←1e5
   1 0 cmpx '+/⍳n'

   t←{n∘←⍵ ⋄ 1 0 cmpx'+/⍳n'}¨1e5×2*⍳8
   ]chart t


1.1 wsreq

   )copy dfns wsreq
   n←1e5
   wsreq '+/⍳n'
   wsreq '2!n'
   wsreq¨ '+/⍳n' '2!n'

1.2 assert

The dfn assert is defined as follows:

assert←{⍺←'assertion failure' ⋄ 0∊⍵:⍺ ⎕SIGNAL 8 ⋄ shy←0}

The details of the definition are not at issue at present (it’s full of technical arcana). Here we just want to use it. In a dfn, assert is used as:

   assert condition :

(The trailing colon is required.) If condition is all 1, then execution merely proceeds to the next line; otherwise an assertion failure is signalled.

Write a function transpose2 to do ⍺⍉⍵ which thoroughly checks thatand are valid arguments for . For example:

transpose2←{      
  assert ⍺=⌊⍺:
  ⍺⍉⍵         
}  
  
   x←3 4⍴⍳12 

   1 0 transpose2 x
0 4  8
1 5  9
2 6 10
3 7 11

   1.5 0 transpose2 x
assertion failure
transpose2[1] assert ⍺=⌊⍺:
             ∧

An arithmetic progression vector is a vector of the form a+b×⍳n where a and b are real scalars and n is a non-negative integer. Write a function apv ⍵ with result 1 ifis an arithmetic progression vector and signals assertion failure otherwise.