在Erlang中实现partition_by函数

凯龙

我正在尝试在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]]]

不完全是我的想法。任何想法出了什么问题?

Hynek -Pichi-他走了出去

当您未提供所需的输出时,我不知道它应该如何工作,但我尝试猜测。

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Cron在Erlang中的实现

来自分类Dev

Cron在Erlang中的实现

来自分类Dev

在Erlang中实现放置功能

来自分类Dev

Erlang中的函数链接

来自分类Dev

调试挂在Erlang中的函数调用

来自分类Dev

Erlang中函数的返回值

来自分类Dev

将数组传递给erlang中的函数

来自分类Dev

如何在Elixir中调用Erlang函数

来自分类Dev

如何计算Erlang中的函数调用次数?

来自分类Dev

Erlang中的伪函数是什么?

来自分类Dev

Erlang中函数的返回值

来自分类Dev

将数组传递给erlang中的函数

来自分类Dev

如何计算Erlang中的函数调用次数?

来自分类Dev

在C中实现strcpy函数

来自分类Dev

在Tensorflow中实现fminunc函数

来自分类Dev

递归函数中的堆栈实现

来自分类Dev

JavaScript中的`flip`函数实现?

来自分类Dev

在select子句中,Oracle`partition_by`是否会永久创建这些分区?

来自分类Dev

如何在Erlang中实现ETS状态的线程安全?

来自分类Dev

如何在Erlang中实现以下循环?

来自分类Dev

甚至可以在Erlang中实现组件实体系统吗?

来自分类Dev

Erlang R19中的gen_server实现

来自分类Dev

在php函数中实现2 exec函数

来自分类Dev

将匿名函数作为参数传递给Erlang中的函数?

来自分类Dev

在Erlang中的函数中传递映射类型参数会报错

来自分类Dev

在Erlang中的函数中传递映射类型参数会报错

来自分类Dev

给定时间后在erlang中自动调用的函数

来自分类Dev

在erlang函数中按变量名检索值

来自分类Dev

模式匹配Erlang字符串作为函数中的列表