Itertools для PHP: продолжение

Библиотеку itertools для ПХП я всё же переписал: теперь на вход всем функциям можно передавать что угодно итерируемое. Из ограничений осталось только два: функция iter в моём варианте принимает только один аргумент, а у функций product и izip_longest последний аргумент является обязательным.

Вот, кстати, как переписывается программка итерстрип, написанная мной семь лет назад на «Пайтоне», теперь её можно повторить на ПХП почти один-в-один:
require 'itertools.php';
use function itertools\groupby, itertools\xrange, itertools\chain, itertools\repeat;

function ntrim($letter, $n=3, $replby=1)
{
    $shrink_groups = function($letter, $n) {
        foreach (groupby(chain(repeat('', $n), $letter, repeat('', $n))) as list($item, $grp)) {
            $grp = iterator_to_array($grp);

            yield $item || sizeof($grp) < $n ? $grp : '';
        }
    };

    return array_slice(iterator_to_array(chain(...$shrink_groups($letter, $n))), $replby, -$replby);
}

print_r(ntrim(['', 1, 2, 3, '', '', '', '', 4, '', '']));
Увы, на ПХП всё ещё не так компактно (из-за отсутствия генераторных выражений), но уже очень близко.
11 мая 2015 12:17

Сергей Морозов (morozov.livejournal.com)
12 мая 2015, 09:43

Не хочу показаться Мистером Всезнайкой, но в интернете есть похожая библиотека: https://github.com/nikic/iter. Я не вникал глубоко в отличия её и твоего порта, но интересно, было ли бы более эффективно написать ntrim на ней и не портировать itertools? Или же наоборот, что-то из твоего порта можно было бы предложить в nikic/iter. Понятно, что самому писать с нуля полезно в образовательных целях, но тем не менее.

bolknote.ru (bolknote.ru)
12 мая 2015, 10:13, ответ предназначен Сергей Морозов (morozov.livejournal.com):

Это не реализация библитеки itertools, а всего лишь нескольких методов оттуда, нескольких из базовых функций языка и нескольких просто, по всей видимости, придуманных (по крайней мере я их в «Пайтоне» не помню).

Сергей Морозов (morozov.livejournal.com)
12 мая 2015, 11:06

Нет, это не реализация itertools, а просто другая библиотека. Из предыдущего поста не понятно, искал ли ты именно порт itertools на PHP, использующий генераторы, или хотел ознакомиться с библиотеками, которые используют генераторы для создания итераторов, и для этого портировал itertools.

bolknote.ru (bolknote.ru)
12 мая 2015, 12:29, ответ предназначен Сергей Морозов (morozov.livejournal.com):

Мне хотелось сделать «честный» порт itertools (с генераторами), плюс разобраться с деталями генераторов в ПХП, заодно сравнить с тем, что есть в «Пайтоне».

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)