I was writing an operator that acts as an "if"-statement, calling one of
two functions depending on the value of the argument:
∇Z ← (then SEL else) arg
→(arg=1)/do¯then
→(arg=0)/do¯else
⎕ES 'Illegal value for arg'
→0
do¯then:
Z ← then arg
→0
do¯else:
Z ← else arg
∇
Note that the then and else functions are called with an argument "arg".
When I call this operator with two nihilic lambda functions, I get very
strange behaviour:
* ⊣ ({⎕←'was true'} SEL {⎕←'was false'}) 0*
was false
* ⊣ ({⎕←'was true'} SEL {⎕←'was false'}) 1*
was false
was true
I would expect to get an error message here, or perhaps seeing (⎕NC '⍵') to
be 0. I certainly didn't expect to see both functions be called. My
suspicion is that there is a problem with the parser somewhere, but I think
Jürgen will have to look at this one.
Regards,
Elias