Sous ce nom un peu emphatique se cache une tentative de rendre l’écriture de certaines formes d’expressions lambda en Erlang plus intuitive. Je me suis concentré principalement sur la composition et l’application partielle de fonctions.
En Erlang, les expressions lambda prennent la forme de fonctions anonymes créées en utilisant le mot clés fun :
fun(X) -> 2 * X end.
fun lists:
map/2.
Comme tout langage fonctionnel qui se respecte, Erlang gère ces expressions comme des variables capturant l’environnement dans lequel elles sont définies:
adder(N) ->
fun(X) ->
N + X %% N est une variable lié
end.
Néanmoins, certaines opérations, telle que la composition de fonctions ou l’application partielle, nécessitent une écriture assez prolixe. Pour effectuer la composition F o G, il faudrait écrire quelque chose du genre:
fun(X, Y, ...) -> F(G(X, Y, ...)) end.
De même, les applications partielles doivent être écrites comme de nouvelles fonctions:
F = fun(X, Y) -> X + Y end.
G = fun lists:
map/2.
F1 = fun(X) -> F(X, 1) end.
G1 = fun(L) -> lists:
map(F1, L) end.
Le résultat n’est pas franchement intuitif et ne suggère pas qu’il s’agisse de compositions dans le premier cas, ou d’applications partielles dans le second. C’est ce que j’aimerais changer avec le parser lambda_expr.
Read more