【问题标题】:no function clause matching erlang没有匹配erlang的函数子句
【发布时间】:2015-03-20 00:08:21
【问题描述】:

我刚拿起 Erlang,遇到了一个简单的问题,但我无法修复它或找到任何关于它的信息。我正在尝试定义一个模块来检查atom 是否在给定列表中。我是这样通过 Erlang shell 进入列表的:

veggies:veggieMember([cucumber,tomato,potato],tomato).

但我总是得到exception error: no function clause matching

也许我误解了基础知识,但这是我正在尝试做的模块代码:

-module(veggies).

-export([veggieMember/2]).

veggieMember(veggieList,query)->
case lists:member(query, veggieList) of
    true->veggieList;
    false->[query|veggieList]
end.

【问题讨论】:

    标签: erlang erlang-shell


    【解决方案1】:

    erlang 中的绑定以大写字母开头。所以应该是:

    -module(veggies).
    
    -export([veggieMember/2]).
    
    veggieMember(VeggieList,Query)->
    case lists:member(Query, VeggieList) of
        true -> VeggieList;
        false -> [Query|VeggieList]
    end.
    

    在您的示例中它不起作用,因为没有匹配的函数子句。原子veggieList 不匹配列表[cucumber,tomato,potato] 和原子query 不匹配原子tomato

    错误本身,它是standard errors 之一。这意味着您已经调用了函数并且没有任何函数子句(由; 分隔)匹配。

    【讨论】:

    • Binding in erlang starts with a capital letter,为什么要大写呢?输入资金需要额外的按 shift 键:)
    猜你喜欢
    • 1970-01-01
    • 2021-04-03
    • 2015-01-14
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    相关资源
    最近更新 更多