In
<http://www.jsoftware.com/jwiki/RE%20Boss/J-blog/Special%20code%20for%20f/.%
40:g>
http://www.jsoftware.com/jwiki/RE%20Boss/J-blog/Special%20code%20for%20f/.%4
0:g I define the conjunction 'obta' - oblique at table.
f obta g is equivalent to f/.@:(g/) but is much leaner and a bit faster.
See the wiki-page for the detailed figures.
obta=: 2 : 0
assert. 'dyad only'
:
assert. >{.(x *.&(1...@$) y) ; 'vectors only'
if. x -: y do. (u@:(v|.)\y) , }.u@:(v|.)\.y
else.
's t'=: x ,&# y
z=. $0
if. s=t do. y=.|.y
if. x-:y do. z=.(u@:(v@:(,:|.))\y) , }.u@:(v@:(,:|.))\.y
else. NB. y=.|.y
z=. i.0 1
for_j. i.&.<: s do. z=.z, ((j{.x) u@:v (-j){.y) , ((-j){.x) u@:v j{.y
end.
end.
elseif. s<t do. y=.|.y
for_j. i.&.<:s do. z=.z, (j{.x) u@:v (-j){.y end.
z=.z, |.s x&(u@:v)\y
for_j. |.i.&.<: s do. z=.z, ((-j){.x) u@:v j{.y end.
elseif. s>t do. y=.|.y
for_j. i.&.<:t do. z=.z, (j{.x) u@:v (-j){.y end.
z=.z, t (u@:v)&y\x
for_j. |.i.&.<: t do. z=.z, ((-j){.x) u@:v j{.y end.
end.
end.
)
R.E. Boss
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm