我正在尝试在Erlang中创建一个基于分区的函数,其中第一个参数是谓词函数。
step(_, [ ]) ->
[ ];
step(N, C) ->
[_ | T] = C,
case (N > 0) and (length(C) > 0) of
true ->
step(N - 1, T);
false ->
C
end.
drop(_, [ ]) ->
[ ];
drop(Number, Collection) ->
step(Number, Collection).
partition_by(_, [ ]) ->
[ ];
partition_by(F, Collection) ->
[H | T] = [Collection],
Head_value = F(H),
Run = [H | lists:takewhile(fun(E) -> Head_value =:= F(E) end, T)],
[Run | partition_by(F, erl_funcs:drop(length(Run), Collection))].
但是当调用它时:
partition_by(fun(E) -> E > 0 end, [-44444, -4555555, 455555]).
我越来越:
[[[-44444,-4555555,455555]],[[-4555555,455555]],[[455555]]]
不完全是我的想法。任何想法出了什么问题?
当您未提供所需的输出时,我不知道它应该如何工作,但我尝试猜测。
partition_by(F, [H|T]) ->
partition_by(F, F(H), T, [H]).
partition_by(F, HV, [H|T] = L, Acc) ->
case F(H) of
HV -> partition_by(F, HV, T, [H|Acc]);
_ -> {lists:reverse(Acc), L}
end;
partition_by(_, _, [], Acc) -> {lists:reverse(Acc), []}.
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句