[Jprogramming] Tacit argument checking

Kip Murray km at math.uh.edu
Wed May 27 00:59:34 HKT 2009


Thank you, Viktor, that is great!

(For latecomers, the question was how to write a tacit verb that checks its arguments, for 
example a monad"0 that returns the natural logarithm of its argument but exits with an error 
message if the argument is not real and positive excluding _ (infinity).)

Then

    Assert =: [:`]@.  NB. Viktor Cerovski

    f =: [: ^. (<&_ * >&0) Assert"0

    f
[: ^. [:`]@.(<&_ * >&0)"0

    f 1 2 3 4
0 0.693147 1.09861 1.38629

    f 0j1
|domain error: f
|       f 0j1

    f b. 0  NB. The following is my fault, not Viktor's
_ _ _


Viktor puts the "0 in the right place.  If I really wanted monad"0 I could have used ^. @ ... 
for the composition and (] :[:) in the definition of Assert.

How can I produce my own error message, for example "error: arguments must be positive excluding _"?


Viktor Cerovski wrote:
(snip)
>    Assert=:[:`]@.
>    (<&_ * >&0) Assert
> [:`]@.(<&_ * >&0)
>    (<&_ * >&0) Assert"0 (1 2 3 4)
> 1 2 3 4
>    (<&_ * >&0) Assert"0 (1 2 3 4 0)
> |domain error
> |       (<&_*>&0)Assert"0(1 2 3 4 0)
>    ^. (<&_ * >&0) Assert"0 (1 2 3 4)
> 0 0.693147 1.09861 1.38629





More information about the Programming mailing list