Hi David,
thanks, fixed in SVN 363.
Please note that using a value as right function argument of an operator
is IMHO a rather dubious construct. I know that IBM APL2 allows it, but the
ISO standard is rather unclear about it. On one hand ISO defines the ⍤
operator
using a value *y *as right operator argument. On the other hand they define
the syntax of operators and other things as as /"search the form-table
for ..."/
without ever telling how the form-table is constructed, eg. for user defined
functions.
A syntactically cleaner approach would be to use an axis (χ in lambdas) for
an extra value argument of the operator (not fully tested yet):
∇z←l (f foo)[x] r
[1] z←(r f l) (l x r)
[2] ∇
1 {⍺ ⍵} foo [{3}] 2
2 1 1 3 2
/// Jürgen
On 07/06/2014 12:39 AM, David B. Lamkins wrote:
The last time I worked on my component-file code was circa SVN 220. At
the time, I was using a defined operator that took a constant function
as its right function. Something akin to this, where g would always be a
constant function, e.g. {1}:
∇z←l (f foo g) r
z←(r f l) (l g r)
∇
At the time, I could call this operator as:
1 {⍺ ⍵} foo {3} 2
2 1 1 3 2
(The above isn't exactly what I was doing... I was using the constant
value by itself. That used to work. This is just illustrative of what I
think that call ought to do, but doesn't in the current build.)
Interestingly, I can still use a constant function on the left of the
operator:
1 {3} foo {⍺ ⍵} 2
2 3 1 1 2
When I try to put a constant function to the right of the operator, this
is what happens:
1 {⍺ ⍵} foo {3} 2
VALUE ERROR
1 λ2 foo λ1 2
^
Are my expectations out of line, or is this a bug?