k/q does this. They're called views[1]
z::x+y
x:42
y:42
z
y:69
z
[1]: https://code.kx.com/v2/ref/view/ z::x+y
x:42
y:42
z
y:69
z
[1]: https://code.kx.com/v2/ref/view/ let x = ()=>42
let y = ()=>42
let z = ()=>x()+y()
z() // 84
y = ()->69
z() // 111 q)z::show(x;y;x+y);x+y
q)x:42
q)y:42
q)z
42 42 84
84
q)x:69
q)z
69 42 111
111
q)z
111
Views are also aware of what's changed: q)a:1234
q)z
111
q)y:69
q)z
69 69 138
138