调用函数时Erlang“unbound variable”

时间:2012-10-04 01:13:45

标签: erlang

我正在尝试将整数参数N传递给cake并返回2的平方大小N的列表(为了示例)。例如面包店:cake(3)=> [4,4,4]

以下是我到目前为止的尝试:

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

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

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

但是当我在erl中编译代码c(bakery).时,我得到以下错误跟踪:

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

我仍然习惯于匿名函数和erlang一般来说是一个面向对象的世界。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:7)

每个Erlang模块,如here所述,应该包含一系列属性和函数声明,每个都以句点(。)结束。

但这一行:

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

...既不是也不应该写成如下:

foo(X) -> X * X.

foo此处为小写,因为此行为function declaration,其中函数名称应为atom

所以最后你的模块看起来像这样:

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

foo(X) -> X * X.

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

答案 1 :(得分:2)

之前的解决方案是正确的,但您也可以使用此代码解决问题:

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

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

问候。