2014-07-06 2 views
1

, 장 12.7의 끝에서 그는 말한다 :꼬리 재귀 조 암스트롱의 책에서

이 쉽게 방지

", 당신은 루프로 (반환하지 함수 F를 작성하는 경우()), F를 호출 한 후에는 절대로 아무것도 호출하지 말고,리스트 또는 터플 생성자에서 F를 사용하지 마십시오. "

발췌 : Joe Armstrong. "프로그래밍 Erlang, Second Edition."

그는 무엇을 의미합니까? "목록 또는 튜플 생성자에서 F를 사용하지 마십시오."

감사

+1

제발, 우리에게 더 많은 문맥을주세요. 나는 내 앞에 책이 없다. 당신이 피하려고하는 것은 무엇입니까? – loxs

답변

4

나는 책을 가지고 있지 않지만, 문자 그대로 당신이 다음과 같은 상황을 방지해야한다는 것을 의미한다 :

loop() -> 
    receive 
     M -> do_stuff() 
    end, 
    loop() 
end. 

some_func() -> 
    foo(), 
    loop(), 
    % Don't do this 
    bar() % bar will never be called 
end. 

other_func() -> 
    % Don't do this 
    T = {test,loop()}, % T will never be created 
    % Nor this 
    L = [loop()|lists:seq(1,12)] 
end. 

참고 :이은에 언급 ​​된 꼬리 재귀와는 아무 상관이 없습니다 질문의 제목. 함수 루프/0은이 예제에서 꼬리 재귀 적입니다.

+1

고맙습니다. 이것은 의미가 있습니다. 나는 그가 이렇게하지 의미한다고 생각 : 루프() -> do_stuff() 끝 [루프() | 목록 서열 (1,12)] -> 가 M받을 끝. – antipatreal