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