2009-11-24 4 views
9

나는 모든 문서와 대부분의 LFE 소스를 읽었습니다. 모든 프리젠 테이션은 일반적인 문제 해결, Hello World, 구문 에뮬레이션 매크로 등의 전통적인 리스프 역할에서 기본 리스프를 강조합니다.Lisp Flavored 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* 형태가 아니면 이미 하나처럼 행동한다?
  • 내가 쓰는 것처럼 경비원이 더 희미한 정수가 아닌 is_integer라고 불렀습니까?
5

에 LFE 릴리스의 예제의 심각한 부족, 모든 기부금을 환영합니다.

기독교의 제안은 올바른 것입니다. 나의 유일한 의견은 대문자 화 된 변수 이름을 가질 필요가 없다는 것인데, 틀린 것은 아니지만 반드시 필요한 것은 아니다.

LFE let은이 "진짜"하는 변수 바인딩이 몸에 볼 최초로 할 수있다. let의 패턴을 사용할 수 있습니다. 또한 순차적으로 바인딩하는 let* 형식 (실제로 매크로)이 있습니다.

아니, 지금까지 그들이 바닐라 얼랑에서와 마찬가지로 모든 얼랑 핵심 기능 이름을 유지했다. 이름에 _ 대신 -을 사용하는 것이 분명하지만, 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 ... 

그러나 나는 그것에 대해 매우 양가입니다 :

나는 다음 행동 모듈처럼 보이는 가질 수 있습니다.

+0

아마도 혼동을 일으킬 수 있습니다. Common Lisp 사용자에게 원자 이름이 대소 문자를 구별하지 않는다는 사실을 알리는 데 항상 시간을 투자 한 적이 있다고 상상해보십시오. 그러나 독자는 "interning"하기 전에 원자를 대문자로 취급하는 것입니다. – Christian

+0

내 작은 경험은 혀짤배기와 얼랑의 구문 매핑 코더가 내가 생각하는 등, 얼랑 소스를 읽고 정신적 쉼표 괄호를 대체하여 번역을 의미하는보기에서 매우 빠르게 사라지고 있다는 것입니다 저를 여행 할 식별자를 재 작성의 또 다른 단계 구문을 다시 쓰려고 할 때마다 거의 모든 시간을 보냈습니다. 나는 대속에 반대한다. –