我正在尝试将整数参数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一般来说是一个面向对象的世界。任何帮助将不胜感激。
答案 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) ].
问候。