【问题标题】:Erlang exception error for no match of right hand side value右侧值不匹配的 Erlang 异常错误
【发布时间】:2019-02-27 07:17:36
【问题描述】:

我有这段代码应该在列表中打印数字 1 到 N-1,但这里的 I 不会附加到列表中。

enum(N,[],N) -> [];
enum(N,L,I) ->
  io:format("current number: ~w~n", [I]),
  L = L ++ I,
enum(N,[],I+1).

enumFunc(N) -> enum(N,[],1).

当我运行 sample:enumFunc(100). 时,它返回 exception error: no match of right hand side value [1]

请帮我解决这个问题。谢谢。

【问题讨论】:

    标签: erlang erl


    【解决方案1】:

    Erlang 是一种单一的赋值语言。这意味着如果一个值已经分配给L,您就不能给L 分配一个新值。当您尝试通过L = L ++ I“分配”一个新值时,您实际上是在执行 匹配 操作。您看到no match of right hand side value [1] 错误的原因是因为L 不等于L ++ I,因为L 已经分配了[1] 的值并且与[1,2] 不匹配

    enum(N,L,N) -> L;
    enum(N,L,I) ->
      io:format("current number: ~w~n", [I]),
      L0 = L ++ [I],
      enum(N,L0,I+1).
    
    enumFunc(N) -> enum(N,[],1).
    

    【讨论】:

    • 它返回了一个Warning: the result of the expression is ignored
    • 尝试将_L1 = L ++ I 更改为_ = L ++ I
    • 没有更多错误,但它仍然没有将任何内容附加到列表中。
    • 我已经编辑了我的帖子,以展示如何添加到列表中。
    • 工作就像一个魅力。非常感谢!
    猜你喜欢
    • 2015-12-06
    • 2014-02-06
    • 2016-05-05
    • 1970-01-01
    • 2020-10-08
    • 2016-02-16
    • 2014-06-27
    • 2014-04-12
    • 2021-04-03
    相关资源
    最近更新 更多