2

我刚拿起 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.
4

1 回答 1

7

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

-module(veggies).

-export([veggieMember/2]).

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

在您的示例中,它不起作用,因为没有匹配的函数子句。AtomveggieList不匹配 list[cucumber,tomato,potato]并且 atomquery不匹配 atom tomato

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

于 2015-01-21T13:02:25.443 回答