Hacker News new | past | comments | ask | show | jobs | submit login
Recursive Anonymous Functions in Elixir: Combinators and Macros (github.com/jisaacstone)
62 points by networked on Dec 31, 2016 | hide | past | favorite | 7 comments



Looks like recursive anonymous functions were introduced in Erlang R17, which is quite old now. Does anyone know the current status of this feature in Elixir or if it has been implemented yet?


As far as I'm aware support for this is still not implemented in Elixir, I'm assuming the implementation would match Erlang, but as shown here, it doesn't necessarily have to. Personally I'm of the opinion that functions like this are better written as named functions, but the one place this is awkward is in iex, where you can't define named functions at the top level, so it has it's place.


I don't know of any new constructs to support recursive anonymous functions in Elixir, but I don't know everything about Elixir either, so that isn't saying much. You could always create an anonymous function to accept a function, and then pass it into itself as an argument though.

Having said that, I've never ran into a case where I wanted to use an anonymous function recursively in Elixir. Come to think of it, I don't really use anonymous functions much at all, outside of Enum calls, which handle the recursion part for you anyway. What would be the use case?

On a side note, I think this article provided an outstanding tutorial for writing macros in Elixir. Since macros are how Elixir implements metaprogramming, knowing how to write them is a good thing. I typically use macros to write more expressive guard clauses, but you can do whatever you want with them. Chris McCord wrote an excellent book on macros, called Metaprogramming Elixir, if you want to know more about them.


I know I've come across a case once where I wanted a recursive anonymous function in Erlang, but I don't remember the context. Couldn't do it in R16.

One use case that comes to mind would be nested data structures where you'd like to iterate over each child's children.


I personally prefer to pull that type of functionality out into a private function. I think it makes the code easier to read.


I didn't say it was a terribly good idea. I agree, usually.


I implemented them in R17. José doesn't dislike them but doesn't have a syntax that fits Elixir for them, given parens around arguments of a lambda are optional.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: