Erlang “二郎”;未绑定变量";调用函数时

Erlang “二郎”;未绑定变量";调用函数时,erlang,Erlang,我试图将一个整数参数N传递给cake,并返回一个大小为N的2平方的列表(为了示例)。e、 烘焙店:蛋糕(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)。时,我得到以下错

我试图将一个整数参数N传递给
cake
,并返回一个大小为N的2平方的列表(为了示例)。e、 烘焙店:蛋糕(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,一般来说,这是一个面向对象的世界。如有任何帮助,我们将不胜感激。

如前所述,每个Erlang模块应由一系列属性和函数声明组成,每个属性和函数声明以句点(.)结尾

但这句话:

Foo = fun(X) -> X * X end.
。。。两者都不是,应改为如下所示:

foo(X) -> X * X.
foo
在这里是小写的,因为这一行是a,其中函数名应该是a

因此,最终您的模块将如下所示:

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

foo(X) -> X * X.

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

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

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

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