2009-11-24 6 views
9

私はすべてのドキュメントとLFEのソースのほとんどを読んだ。すべてのプレゼンテーションでは、一般的な問題解決、Hello World、構文エミュレートマクロなど、従来のリスプの役割における基本的なリスプを強調しています。Lisp風味のErlang - メッセージングプリミティブ

LFEがメッセージングプリミティブを処理する方法を知っている人はいますか?より正確な質問を指定するには、どのようにこのアーラン表現になります。

A = 2, 
Pid = spawn(fun()-> 
    receive 
     B when is_integer(B) -> io:format("Added: ~p~n",[A+B]); 
     _ -> nan 
    end 
end), 
Pid ! 5. 

をそして、あなたが知っている、それはいくつかの数字と7

答えて

7

は、私はないよという答えを合計したことについて何かをマンブルズLFEユーザーですが、ソースツリーにuser guideがあります。

(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*フォームはありますかそれはすでに1のように動作していますか?
  • 私が書いたように、警備員はより多くのlispy is-integerと呼ばれ、is_integerと呼ばれていませんか?
5

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

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

LFE 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 ... 

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

+0

おそらく混乱を招くでしょう。 Common Lispのユーザに、原子名が大文字小文字を区別しないことを知らせるために費やされた時間を想像してみてください。しかし、読者は単にそれらを「インターンさせる」前に原子を大文字にしているだけです。 – Christian

+0

私の小さな経験は、lispとerlangの間の構文マッピングが非常に素早く消えていくことです。つまり、コーダーはerlangのソースを読み込み、カンマの代わりに括弧を使用して精神的に翻訳します。ほとんど毎回、構文を書き直すつもりです。私は代理に反対します。 –

関連する問題