我正在尝试sumif
在Erlang中创建一个函数,如果谓词函数的计算结果为true,则该函数将返回列表中所有元素的总和。这是我所拥有的:
sumif(_, []) -> undefined;
sumif(Fun, [H|T]) -> case Fun(H) of
true -> H + sumif(Fun, T);
false -> sumif(Fun, T)
end.
我还实现了自己的pos函数,如果数字大于0,则返回true,否则返回false:
pos(A) -> A > 0.
我尝试使用pos
with,sumif
但出现此错误:
exception error: bad function pos
为什么会这样呢?是因为我的sumif
功能还是pos
?我已经对其pos
进行了单独测试,它似乎工作正常。
编辑:这可能是因为我如何调用该函数。我现在这样称呼它:我的模块名称hi:sumif(pos,[-1,1,2,-3]).
在哪里hi
。
是因为我的sumif函数还是pos?
这是因为sumif
。0
当传递一个空列表时,您应该返回,因为当T
is时将从第二个子句中调用它[]
:
-module(a).
-compile(export_all).
sumif(_, []) -> 0;
sumif(Fun, [H|T]) -> case Fun(H) of
true -> H + sumif(Fun, T);
false -> sumif(Fun, T)
end.
pos(A) -> A > 0.
测试:
1> c(a).
{ok,a}
2> a:sumif(fun a:pos/1, [-4, -2, 0, 2, 4]).
6
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句