Испытания

Списки на базе строк

PHP: Последовательности

Осторожно! Эта задача требует умения работать с массивами для понимания реализации функции l (чтобы принять любое число аргументов). Если вы их не знаете, лучше вернуться к этой задаче после прохождения курса "PHP: Массивы", а также курса "PHP: Функции", в котором рассматривается Splat-оператор.

Необходимо реализовать набор функций для работы со списками, построенными на базе строк. Данный вид списка представляет собой текст, где каждая строчка — это элемент списка, например:

hello
world

Это пример списка с двумя элементами hello и world.

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

src/Lists.php

Реализуйте следующие функции:

  • l(...$items) — функция-конструктор. Уже реализована
  • toString($list) — возвращает строковое представление списка
  • head($list) — возвращает первый элемент списка
  • tail($list) — возвращает "хвост" списка (все элементы, кроме первого)
  • isEmpty($list) — проверяет, является ли список пустым
  • cons($item, $list) — добавляет элемент в начало списка и возвращает новый список
  • filter($list, $predicate) — фильтрует список, используя предикат
  • map($list, $callback) — преобразует список, используя callback-функцию
  • reduce($list, $callback, $init) — производит свертывание списка

Примеры

<?php

$list = l('foo', 'bar', 'baz');

toString($list); // (foo, bar, baz)

head($list); // 'foo'
tail($list); // l('bar', 'baz')

isEmpty($list); // false
isEmpty(l()); // true

$newList = cons('bas', $list); // l('bas', 'foo', 'bar', 'baz')
$filteredList = filter($list, fn($item) => $item[0] === 'b'); // l('bar', 'baz')
$mappedList = map($list, fn($item) => $item[0]); // l('f', 'b', 'b')
$reducedList = reduce($list, fn($item, $acc) => $acc ? "{$acc},{$item}" : $item, '');  // foo,bar,baz

Примечания

  • Решение учителя на 100% функциональное
Успешных завершений: 100%

Для полного доступа к испытанию нужна профессиональная подписка

Профессиональная подписка откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, даст возможность обращаться за помощью к менторам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
115
курсов
892
упражнения
2241
час теории
3196
тестов

Последние код-ревью

Автор Дата обновления Версий
orionbetel 04 июля, 20:10 1