첫 번째 인수가 술어 함수 인 Erlang에서 파티션 바이 함수를 만들려고합니다.Erlang에서 partition_by 함수 구현
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]]]
아니 정확히 내가 생각하고있어. 어떤 아이디어가 잘못 될까요?
네, 정확히 그게 내가 찾고 있어요 출력입니다. 원래 알고리즘의 문제점은 무엇입니까? – Chiron
전화 목록의 성능 영향 : 큰 목록에서 역방향/1? – Chiron
C에서 BIF로 구현 된 O (n) 시간 및 O (n) 공간 연산입니다. 어쨌든 당신은 시도하고 측정 할 수 있습니다. 내 코드가 더 나을거야. –