这是我的第一个Erlang项目。基本上,我必须编写一个函数,它将整数列表作为参数&返回列表中小于1的整数数。到目前为止我所拥有的函数只返回列表中的整数数。我不确定在哪里/我是否应该将if语句和计数器仅返回少于1的整数。
-export([num/1]).
num([]) -> 0 ;
num(L) -> num(L,0).
num([],Len) -> Len;
num([_|T],Len) ->
num(T,Len+1).
答案 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).