3

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

4

2 回答 2

8

如此处所述,每个 Erlang 模块都应包含一系列属性和函数声明,每个都以句点 (.)

但是这一行:

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

... 两者都不是,应改为如下所示:

foo(X) -> X * X.

foo这里是小写的,因为这一行是一个函数声明,其中函数名应该是一个原子

所以最终你的模块将如下所示:

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

foo(X) -> X * X.

cake(0) -> [];
cake(N) when N > 0 -> [ foo(2) | cake(N-1) ].
于 2012-10-04T01:26:48.453 回答
2

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

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

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

问候。

于 2012-10-09T12:08:31.417 回答