Erlang - 如何返回元素数/元素数

时间:2014-09-30 02:46:21

标签: erlang

这是我的第一个Erlang项目。基本上,我必须编写一个函数,它将整数列表作为参数&返回列表中小于1的整数数。到目前为止我所拥有的函数只返回列表中的整数数。我不确定在哪里/我是否应该将if语句和计数器仅返回少于1的整数。

-export([num/1]).

num([]) -> 0 ;
num(L) -> num(L,0).

num([],Len) -> Len;
num([_|T],Len) ->
    num(T,Len+1).

3 个答案:

答案 0 :(得分:13)

您可以使用length()查找列表的长度,并可以使用 list comprehensions 过滤你的清单。

num(L) -> length([X || X <- L, X < 1]).

工作示例:

% list counter program
-module(listcounter).
-export([printnum/0, num/1]).

printnum() ->
    L = [1,2,3,0,0],
    io:fwrite("List size: ~p\n",[num(L)]).

num(L) ->
    length([X || X <- L, X < 1]).

答案 1 :(得分:5)

你的代码几乎就在那里。学习的关键技能:guard

-export([num/1]).

num([]) -> 0;
num(NUMS) ->
        num(NUMS, 0).

num([H|L], Count) when H < 1 ->  %% use of guard
        num(L, Count+1);
num([_|L], Count) ->
        num(L, Count);
num([], Count) ->
        Count.

答案 2 :(得分:1)

这个避免建立一个中间列表。与使用erlang库和匿名函数的Anthony提议大致相同。

lists:foldl(fun(X,Count) when X < 1 -> Count+1; (_,Count) -> Count end,0,L).