
Peter Hercek wrote:
So the question is what am I missing? Any nice use cases where fixed point search is so good that it is worth the trouble with figuring out new and new variable names for essentially the same stuff?
When I write functional code, I do find myself writing recursions much more often than writing imperative-wannabe assignments. I appreciate that Haskell's "let" defaults to recursion. I don't appreciate that OCaml makes a distinction between "let" and "letrec", since every time I change a non-recursive definition to a recursive one, I am prone to forget to change "let" to "letrec", IOW it is a hidden hazard to maintenance and evolution. When I write imperative code in Haskell, the notation is so different from functional code that "let" doesn't even come into the equation. When I write imperative code in imperative languages, my mental model treats "x:=x+1" as "x'=x+1 and y'=y and z'=z and ...", following several treatises on imperative semantics(*). Going back to functional programming, when I do write imperative-wannabe assignments, I totally like having names x, x', x'', etc., since they're in my head anyway. Underlying all this is probably the soberness of recognizing that "=" is not ":=". (*) Such as: Eric C. R. Hehner, "A Practical Theory of Programming". First edition Springer 1993. Current edition at http://www.cs.toronto.edu/~hehner/aPToP/ C. A. R. Hoare and He Jifeng, "Unifying Theories of Programming". Prentice Hall 1998. The Z specification language.