You don’t have to worry about the order of evaluation. It doesn’t seem like a big deal, until you have a big messy problem with data-dependent interdependency. Also, every list is a generator, and every indexable container is an instance of “dynamic programming”. So you just declare how values are computed from other values, and let the runtime take care of ordering things, and it just works. It’s what makes a functional programming language into a declarative one, in practice.