> Experimentation reveals that (f +/ >) above uses the fast > code for ([: +/ >), so somehow the initial execution of the > hook looked at the value of f, even though only its name is > supposed to be available.
Actually, it does not use the special code for ([: +/ >) : x=: 1e6 [EMAIL PROTECTED] 0 y=: 1e6 [EMAIL PROTECTED] 0 cap=: [: ts=: 6!:2 , 7!:[EMAIL PROTECTED] ts 'x ([: +/ >) y' 0.117277 1344 ts 'x (cap +/ >) y' 0.13848 1.05011e6 The array result is the same, of course. x ([: +/ >) y 500393 x (cap +/ >) y 500393 ----- Original Message ----- From: "Henry Rich" <[EMAIL PROTECTED]> To: "'Programming forum'" <[email protected]> Sent: Thursday, May 25, 2006 11:14 AM Subject: [Jprogramming] Does (f g h) sneak a peek at f? I suspect only Roger can elucidate this. x=: 1e3 [EMAIL PROTECTED] 1e4 y=: 1e3 [EMAIL PROTECTED] 1e4 f =: [: $ x (f +/ >) y Interesting. Why wasn't f executed, giving a domain error? Experimentation reveals that (f +/ >) above uses the fast code for ([: +/ >), so somehow the initial execution of the hook looked at the value of f, even though only its name is supposed to be available. f =: ff ff =: [: $ x (f +/ >) y |domain error: ff | $x (f+/>)y Apparently the look goes down only one level. Is this so someone can assign cap =: [: and use it? But it violates the normal rules. With f as defined above, I can write f =: ff ff =: [: s =: 4 : 0 f =: + x > y ) $ x (f +/ s) y 1000 1000 which is correct: executing s modified the value of f, and the modified value was used, avoiding the domain error. But if f is defined as [:, the modified value is not used: f =: [: $ x (f +/ s) y See? It executed as if f were [: $ x (f +/ s) y 1000 1000 Second time through, it uses the changed f. It looks like f in (f g h) is inspected to see if it is [:, and if it is, special steps are taken. If this is so, it should be documented. But it seems a kludge to me, and I think the special case should be removed (I have an interest in this, because whether you document it or not, I have my book to think about). If someone wants cap, let 'em write [: . ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
