我想使用Lisp Flavored Erlang作为Erlang 应用程序的脚本扩展语言。如果您愿意,可以通过Emacs Lisp以类似的方式配置和扩展GNU Emacs。
我知道这个论点是广泛而有条理的。但在这个问题的特定情况下,我希望能够从 Erlang 代码中读取 LFE 中定义的绑定名称(或变量,如果您愿意的话)。
我不是LFE内部架构的专家(这是软件工程和 Erlang 编程的一个很好的例子),但我在源代码和文档中都找不到答案。查看源代码我可以看到 LFE 包含一个以Erlang VM为目标的编译器和一个解释器。后者是我正在尝试使用的。
如果我在 LFE 安装路径(在我的系统上)中启动 Erlang shell/ REPL$HOME/opt/lfe
:
$ cd /path/to/LFE-install-dir
$ erl -pa ./ebin
我能够计算一个值:
1> {ok, Expr} = lfe_io:read_string("(+ 1 10)").
{ok,['+',1,10]}
2> Result = lfe_eval:expr(Expr).
11
这是第一步,但不完全是我想要的。我宁愿绑定一个变量并读取它的值;那是我的问题:
3> {ok, Expr2} = lfe_io:read_string("(set a 10)").
{ok,[set,a,10]}
4> lfe_eval:expr(Expr2).
** exception error: {unbound_func,{set,2}}
in function lfe_eval:eval_expr/2
为什么set
被识别为未绑定函数?在 LFE REPL 中,这个表达式是有效的:
Erlang/OTP 17 [erts-6.4] [来源] [64 位] [smp:4:4] ... LFE Shell V6.4(使用 ^G 中止) >(设置一个10) 10 > 一个 10
我显然以错误的方式使用 API。如何阅读a
和/或正确初始化LFE 解释器的内容?
(如果这在某处有解释,请提供参考)。