Шаг нули в конец массива


Проблемы перехода нули в конец массива, как и вся здесь. Я сделал это, как ниже на Erlang. Я просто думаю, что мой способ очень простой и, наверное, есть более элегантный способ сделать это с помощью рекурсии?

-module(move_zeroes).
-compile([export_all, debug_info]).

%% This is solving this problem: 

%% API exports
-export([]).

move_zeroes(L) ->
    moving_zeroes(L, []).

moving_zeroes(L, _) ->
    Zeroes = lists:filter(fun(X) -> X == 0 end, L),
    Non = lists:filter(fun(X) -> X /= 0 end, L),
    Non ++ Zeroes.


117
2
задан 18 марта 2018 в 10:03 Источник Поделиться
Комментарии
1 ответ

Это проблема, которая хорошо подходит для поэлементного агрегации. Рассмотрим следующие:

move_zeroes (L) ->
case L of
[0 | T] -> move_zeroes(T) ++ [0];
[El | T] -> [El] ++ move_zeroes(T);
_Else -> L
end.

Я только вслепую гадать на синтаксис, но это должно прояснить, как написать это без использования lists:filter дважды. Кроме того, он избегает вспомогательной функции, которую вы создали здесь, который, кажется, не служат цели ...

2
ответ дан 18 марта 2018 в 02:03 Источник Поделиться