Given a list of expressions
d:c+b c:-b e:d*a b:10 a:20
reorder so that everything is computed before it is used:
b:10 c:-b a:20 d:c+b e:d*a
Assume the expressions have been parsed, and one by-product is the dictionary s:
s:.((`d;`c `b)
(`c;,`b)
(`e;`d `a)
(`b;())
(`a;()))
That is, d uses s.d = c,b, b uses s.b = (), &c. Then
order:{?|,/(?,/x@)\y}
order[s;!s]
`b`c`a`d`e
Find the code here.