9

すべてのドキュメントと、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.  

そして、ご存知のように、いくつかの数字を足し合わせて答えが 7 であることについてつぶやきます。

4

2 に答える 2

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)))

しかし、LFE で評価さえしていないので、間違いを犯した可能性が非常に高いです。

私のいくつかの質問:

  • フォームはありますか、LET*それともすでにフォームのように動作していますか?
  • 私が書いたように、ガードは is_integer ではなく、よりリッピーな is-integer と呼ばれますか?
于 2009-11-25T05:01:46.730 に答える
5

LFE リリースには深刻な例の不足があります。すべての貢献を歓迎します。

クリスチャンの提案は正しいです。私の唯一のコメントは、変数名を大文字にする必要はないということです。それは間違っていませんが、必要ではありません。

LFEletは、変数バインディングが本体の最初に表示される「実際の」let です。let でパターンを使用できます。let*シーケンシャルにバインドするフォーム (実際にはマクロ)もあります。

いいえ、私はこれまでのところ、Erlang のコア関数名をすべてバニラの erlang と同じように保持しています。-名前の代わりに使用する方が間違いなくリスキー_ですが、OTP の他のすべての関数名とアトムをどうするのでしょうか? -1 つの提案は、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 ...

しかし、私はそれについて非常に曖昧です。

于 2009-11-25T14:09:37.917 に答える