>>>>> "Hans" == Hans Aberg <[EMAIL PROTECTED]> writes:
>> It's not different logical entities, all occurrences of f are variables.
Hans> Different occurrences of f have different semantic meaning (that is, the
Hans> "f" in one place is not the same as the "f" in another place).
All I'm saying is in "f f = f", the first occurrence of f is a binding
occurrence, the second one is also a binding one, and the third one is
an occurrence of f bound to the second binding.
>> It's not Haskell that's causing the confusion if any, it's the lambda
>> calculus, more precisely: alpha-conversion.
Hans> The original question was this: What is the meaning of "f(f) = f"? I
Hans> remarked that in this case Haskell has a very good strategy, namely
Hans> interpreting it as the expression f := f |-> f, or "f is assigned the
Hans> expression lambda f f" if you so want; the lack of such a good strategy
Hans> seemed to cause the other problems discussed in this thread.
There is no assignment in "f f = f", it's just binding of names. Using
any notion of assignment in this context is misleading IMHO.
Hans> Otherwise, the naming of functions is not part of the lambda calculus;
I disagree on that one: the meaning of
letrec f = \f -> f in e
is
(\f -> e) (fix \f -> \f -> f)
[plug in any fixpoint combinator for fix]
-Peter