Strong typing and (especially) pure functional languages do their absolute best at putting formalism and distance between the expression of a problem’s solution and it’s execution. Which is why people with a mathematical bent keep trying to apply them to the problem at hand – once the solution is expressed in ironclad language, the execution is a much more minor matter.

Interestingly, lazy languages have algorithmic effects. If you wrote a binomial heap in a lazy language, it would actually be a fibonacci heap, because fib heaps are “just” lazy binomial heaps. This auto lazification of data structures and potentially entire algorithms is an interesting one, actually….

If we have auto-memoize on one side, and auto-lazify on the other, it seems like a lot of advanced algorithms become a lot easier. Provided the language’s syntax and libraries don’t suck, of course.

But there’s still the problem that most functional expressions don’t match how people naturally express algorithms to each other – “do this, then do that, then do the other” is not particularly natural in the syntax of most functional languages. Perhaps we need a functional language designed by someone who hates functional programming :)