Me gustaría señalar que la respuesta de Zed crea una diversión interpretada. Cuando se llama a la diversión, ingresa al evaluador, que comienza a evaluar el árbol de sintaxis abstracta devuelto por erl_parse:parse_exprs/1
que ha capturado. En cuanto a la diversión creado:
11> erlang:fun_info(Fun, env).
{env,[[],none,none,
[{clause,1,
[{var,1,'X'}],
[],
[{op,1,'+',{var,1,'X'},{integer,1,1}}]}]]}
12> erlang:fun_info(Fun, module).
{module,erl_eval}
Uno puede ver que se ha cerrado sobre el árbol de sintaxis abstracta analizada como se ve en la env
información, y es una diversión creado dentro erlang_eval como se ve en la module
información.
Es posible usar el compilador erlang para crear un módulo compilado en tiempo de ejecución, y un puntero hacia eso es compile:forms/2 y code:load_binary/3. Pero los detalles de eso probablemente deberían ir a otra pregunta de stackoverflow.
Para convertir una cadena en una diversión, cargue una broma en ella :-) –