2012-10-04 4 views
3

정수 매개 변수 N을 cake에 전달하려고 시도하고 2의 제곱의 크기 N 목록을 반환하려고합니다 (예를 들어). 예 : 베이커리 : 나는 그러나 ERL의 코드 c(bakery).를 컴파일 할 때함수를 호출 할 때 "언 바운드 변수"가 반환됩니다.

-module(bakery). 
-export([cake/1]). 

Foo = fun(X) -> X * X end. 

cake(0) -> []; 
cake(N) when N > 0 -> [ Foo(2) | cake(N-1) ]. 

, 나는 다음과 같은 오류가 발생합니다 : 케이크 (3) => [-4,4,4-]

다음

는 내가 지금까지 시도한 것입니다 추적 :

bakery.erl:4: syntax error before: Foo 
bakery.erl:7: variable 'Foo' is unbound 
error 

익명 함수 및 erlang에 익숙해지기 시작한 것은 객체 지향 세계입니다. 어떤 도움을 주시면 감사하겠습니다. here 바와 같이

답변

7

각 얼랑 모듈, 속성 및 함수 선언의 순서, 기간 종료 각 구성되어야

그러나 라인 (.)

Foo = fun(X) -> X * X end. 

는 ...하지도 않는다 이 라인은,321 때문에

foo(X) -> X * X. 

foo가 여기에 소문자 : 대신에 다음과 같이 쓸 수 있어야 0, 함수 이름은 atom이어야합니다.

-module(bakery). 
-export([cake/1]). 

foo(X) -> X * X. 

cake(0) -> []; 
cake(N) when N > 0 -> [ foo(2) | cake(N-1) ]. 
+0

아, 알겠습니다. 고맙습니다! –

1

이전 솔루션은 정확하지만 당신도이 코드를 사용하여 문제를 해결할 수 있습니다 :

그래서 결국 모듈은 다음과 같이됩니다

-module(bakery). 
-export([cake/1]). 

cake(0) -> []; 
cake(N) when N > 0 -> 
    Foo = fun(X) -> X * X end, 
    [ Foo(2) | cake(N-1) ]. 

감사합니다.

관련 문제