【问题标题】:Erlang "unbound variable" when calling a function调用函数时的Erlang“未绑定变量”
【发布时间】:2023-04-03 17:52:01
【问题描述】:

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

【问题讨论】:

    标签: erlang


    【解决方案1】:

    每个 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) ].
    

    【讨论】:

      【解决方案2】:

      前面的解决方法是正确的,但是你也可以用这段代码解决问题:

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

      问候。

      【讨论】:

        猜你喜欢
        • 2016-06-14
        • 2018-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-26
        • 2015-02-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多