\append=(@\append\x\y x y \h\t [h; append t y])
Where '@' is the Y-combinator.Note that there's no direct self-reference with the symbol "append" there. I could define it equivalently as:
\append=(@\loop\x\y x y \h\t [h; loop t y]) \append=(@\append\x\y x y \h\t [h; append t y])
Where '@' is the Y-combinator.Note that there's no direct self-reference with the symbol "append" there. I could define it equivalently as:
\append=(@\loop\x\y x y \h\t [h; loop t y])https://github.com/chkoreff/Fexl/commit/57b841cb6c2347cad147...
\append==(\x\y x y \h\t [h; append t y])
Maybe I should resurrect that syntax option. :)It was trivial to implement. When the parser sees the "==", it just automatically abstracts the symbol "append" from the definition and applies the fixpoint operator (Y combinator).
The only reason I eliminated "==" in the first place was that I was in the throes of using different syntaxes for lazy, eager, and self-referencing definitions. Now I've settled in on "=" always meaning eager evaluation, without exception. Then I got hyper-minimalist and said that's it, there's only one syntax for definitions, and it's "=", and if you want self-reference, use "@".
However, the decision to settle in on eager evaluation now frees up "==" once again as an option for self-reference. So I may bring that back.
Thanks for the food for thought.
That's a non-starter because I find that redefinition is the more common intent:
\x=4
\x=(* x 5)
\x=(+ y x)
In those cases I don't want x defined in terms of itself, but rather in terms of the previous definition of x.That is why I would insist on a special token such as "==" to express the intention of self-reference.