Imagine the expressions as trees, and the evaluation procedure as a treesuccession of trees, and in each transformation, draw a sign pointing at the new sub-tree, with the symbol responsible written on it. If you ever have to transform that same treesubtree again, the previous sign is lost. When it's time for Return
to evaluate, you go up the tree and see the signs in the path to the top. Those are the ones you can use.