There are several ways to accomplish what I think you're asking for:
Algebraic simplification:
g=:3 :0
-y
)
Pass the intermediate result as a parameter:
g=:3 :0
b=. 2*y
f=. 4 :'y-x'
b f y
)
Or
g=:3 :0
b=. 2*y
f=. b 1 :'y-m'
f y
)
Serialize the desired value and incorporate it in the definition of f
g=:3 :0
b=. 2*y
f=. 3 :('y-',5!:5<'b')
f y
)
Define f tacitly:
g=:3 :0
b=. 2*y
f=. ] - b"_
f y
)
If you want 'b' to be incorporated dynamically (so that updates
propagate into f, then you should pass it as a parameter or pull a
stunt like this:
g=:3 :0
b=. 2*y
f=. ] - ".@'b'
f y
)
You could also use locales, which might be handy if things get
complex, but are way more complicated than this example seems to call
for.
g=:3 :0
loc=. cocreate''
b__loc=. 2*y
f=. loc 1 :'y - b__m'
r=. f y
coerase loc
r
)
There's other ways, also -- mostly variations on parameter passing.
I hope this helps,
--
Raul
On Fri, Mar 20, 2020 at 5:59 PM Rudolf Sykora <[email protected]> wrote:
>
> Dear list,
>
>
> although I seem to be able to define a function within another function,
> it seems that the inner function does not see private variables from the
> outer one. What is then the correct way to write something like
>
> g =: 3 : 0
> b =. 2*y
> f =. 3 : 'y-b'
> f y
> )
>
> g 2
>
> and get -2 as a result?
>
> Here one can change b =. to b =: , but this makes b completely public,
> and that's not particularly nice...
>
>
> Thanks
> Ruda.
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm