algorithm - 在Erlang中实现partition_by函数

标签 algorithm erlang

我正在尝试在 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), []}. 

关于algorithm - 在Erlang中实现partition_by函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22669620/

相关文章:

ubuntu - 在 native 模式下运行 erlang 代码

c++ - n 皇后 (n > 1000) 的快速启发式算法

java - BFS 通过矩阵迷宫陷入循环

algorithm - 除和或除差的最精确的数值方法是什么?

C - 二维数组向外(从中心开始)顺时针螺旋遍历

从两个模块运行代码时,Erlang 进程给出 undef 错误

rest - Cowboy 多方法处理器

java - java.secure.random 是博彩业的充分选择吗?

Erlang 生成任意数量的匿名函数?

linux - 在 linux 上的 erlang shell 中配置键