Does anybody have tips for golfing in Erlang? I'm looking for specific things that can be applied to Erlang, not any language. I know we already have tips for Elixir, but that is different.
As usual, please post separate tips in separate answers.
2 Answers 2
Use the ending conditions
Suppose you have a function reversing a list:
r([H|T])->[T]++r(H);r([])->[].
Since this is the only condition left, this can be golfed into:
r([H|T])->r(T)++[H];r(_)->[].
Or, since this is an identity function:
r([H|T])->r(T)++[H];r(I)->I.
You can also abuse the wild-cards in if statements. E.g.
if A<B->A;true->B end.
This can be golfed into:
if A<B->A;_->B end.
Use Built-in Functions (BIFs)
Erlang’s built-ins like length/1, hd/1, tl/1, and arithmetic operators (+, -, *, div, rem) are concise. Prefer them over manual implementations. For example, hd(L) is shorter than [H|_]=L,H.
Use Guards Sparingly
Guards can shorten logic, but they add characters. Only use them if they replace a longer construct. For example:
f(X)when X>0->1;f(_)->0.
is concise if it avoids a case.
String Handling
Erlang strings are lists of integers, so use [C] for single characters (e.g., $a for 97) to save space over quoted strings. For example:
f()->$a.
is shorter than:
f()->"a".