// repeated application

// typically done using over and scan
// contrived example x^y (use xexp)
// scan to show intermediate steps

ps:{(y-1)(x*)\x}
ps[2;4]
ps[2;10]
ps[5;3]

// to apply selectively to sub entries, use @ amend
d:`a`b`c!2 3 5f
po:{(y-1)(x*)/x}
@[d;`a;po[;4]]
@[d;`a;po[;10]]
@[d;`c;po[;3]]

// there is another method
// https://code.kx.com/q/ref/amend/#amend-at
// repeated indices are accumulated

@[d;3#`a;2*]
@[d;9#`a;2*]
@[d;2#`c;5*]

f1:{@[x;y;{(y-1)(x*)/x}[;z]]}
f2:{@[x;(z-1)#y;x[y]*]}

(~/)(f1;f2).\:(d;`a;4)
(~/)(f1;f2).\:(d;`a;10)
(~/)(f1;f2).\:(d;`c;3)

// useful for dictionary/table contexts
// though performance is slightly worse (memory usage is the same)
\ts:100000 f1[d;`a;4]
\ts:100000 f2[d;`a;4]