Crippled lambdas, no currying, "match" is a clumsy statement, weird name spaces and a rigid whitespace syntax. No real immutability.
Crippled lambdas, no currying, "match" is a clumsy statement, weird name spaces and a rigid whitespace syntax. No real immutability.
That plus named tuples and a little discipline gets me 80+% of the benefits of pure functional.
The biggest thing to me wasn't in your list: lack of tail call optimization means you have to be a bit careful about where you use recursion.
I personally think long anonymous functions are an anti-pattern, naming your functionality is great for readability. I learned this from Wolfram language which makes heavy use of anonymous functions, I would often find myself returning from lunch to find my code which was perfectly clear that morning had become unintelligible. Today I try to limit anonymous functions to re-ordering arguments or "picking" functions that pull simple values out of more complicated data structures.
[0]:https://en.wikipedia.org/wiki/Miranda_(programming_language)...
"As such, curry is more suitably defined as an operation which, in many theoretical cases, is often applied recursively, but which is theoretically indistinguishable (when considered as an operation) from a partial application."
(while I see partial as having value, I'm struggling to see if currying would really be a useful addition to a scripting language)