我已经阅读了所有文档和LFE的大部分来源.所有演示文稿都强调传统lisp角色中的基本lisp - 一般问题解决,Hello world和语法模拟宏.
有谁知道LFE如何处理消息传递原语?要指定更精确的问题,您将如何表达此erlang:
A = 2,
Pid = spawn(fun()->
receive
B when is_integer(B) -> io:format("Added: ~p~n",[A+B]);
_ -> nan
end
end),
Pid ! 5.
Run Code Online (Sandbox Code Playgroud)
然后,你知道,它总结了一些关于添加了一些数字而答案是7的东西.
我不是LFE用户,但源树中有一个用户指南.从阅读它我会猜这是这样的:
(let ((A 2))
(let ((Pid (spawn (lambda ()
(receive
(B (when (is_integer B))
(: io format "Added: ~p~n" (list (+ A B))))
(_ nan))))))
(! Pid 5)))
Run Code Online (Sandbox Code Playgroud)
但我很可能犯了一个错误,因为我甚至没有在LFE中评估它.
我的一些问题:
LET*表格还是表现得像?在LFE版本中严重缺乏示例,欢迎所有贡献.
克里斯蒂安的建议是正确的.我唯一的评论是没有必要使用大写的变量名,这没有错,但没有必要.
LFE let是一个"真正的"让人,其中变量绑定首先在身体中可见.您可以在let中使用模式.还有一个let*形式(实际上是宏)顺序绑定.
不,我到目前为止保留了所有Erlang核心函数名称,就像它们在vanilla erlang中一样.使用-而不是_名称更肯定是lispy ,但是你如何处理OTP中的所有其他函数名和原子?一个建议是自动将-LFE符号映射到_结果原子中,然后再返回到另一个方向.这可能会奏效,但会导致混乱吗?
然后我可以有一个行为模块看起来像:
(defmodule foo
(export (init 1) (handle-call 2) (handle-cast 2) (handle-info 2) ...)
(behaviour gen-server))
(defun handle-call ...)
(defun handle-cast ...)
etc ...
Run Code Online (Sandbox Code Playgroud)
但我对此非常矛盾.