Вопрос №6062 от пользователя SERGEY CHIRVA в уроке «Представление последовательностей», курс «JS: Последовательности»

SERGEY CHIRVA

Здравствуйте! Помогите разобраться с ошибкой в тестах 2 и 3.

// removed

Результат:

  1) Data #reverse:

      AssertionError: '(5, (4, (3, ())))' == '(5, 4, 3)'
      + expected - actual

      -(5, (4, (3, ())))
      +(5, 4, 3)

      at Context.<anonymous> (test.js:16:12)

  2) Data #append:

      AssertionError: '((((3, 4, 5, 8), 3), 2), 9)' == '(3, 4, 5, 8, 3, 2, 9)'
      + expected - actual

      -((((3, 4, 5, 8), 3), 2), 9)
      +(3, 4, 5, 8, 3, 2, 9)

      at Context.<anonymous> (test.js:22:12)

Если правильно понял теорию, toString в строках 16 и 22 test.js должен преобразовать в строки результаты моих функций.

В моём же случае выводится ((((3, 4, 5, 8), 3), 2), 9) и ((((3, 4, 5, 8), 3), 2), 9) соответственно. Пожалуйста, окажите содействие в решении проблемы. Заранее благодарен.

4 0

Александр О.

Добрый день! По поводу функции reverse:

  1. Вы путаете функции l и cons: разберитесь, как они работают и чем они отличаются, изучив файл документации hexlet-pairs-data.md. Вызывая таким образом каждый раз l с двумя аргументами, Вы не расширяете список, каждый раз просто создаётся новый список с двумя (а не более) значениями. Это основная "претензия" к приведённому коду функции.;)
  2. Очевидно, что функция должна возвращать сам список (перевёрнутый), а не его строковое представление. Уже во вне функции (в клиентском коде) с этим списком потом можно будет делать что-угодно, в т.ч. привести к строке с помощью функции toString, поэтому такой возврат return toString(revList); некорректен.
  3. Рекомендую потом попробовать написать ту же функцию, но без использования цикла while, т.е. самостоятельно написать рекурсивную функцию, реализующую итеративный процесс с аккумулятором (пересмотрите посвящённый этой теме урок из прошлого курса).

По поводу функции append:

  1. Возможно, разобравшись с reverse (см. выше), уже отпадут вопросы с текущей функцией ;)
  2. Не буду здесь дублировать, просто посмотрите комментарии (в т.ч. мои) в "Вопросах и ответах" по поводу того, как можно реализовать append - там достаточно наводящей информации.
0

SERGEY CHIRVA

Благодарю за Ваши комментарии!

  1. Использование l - это уже второй вариант решить третью задачу. В первом варианте использовал cons и отладка упорно выдавала Pair is not function в 22-й строке test.js: ``` 1 failing

1) Data #append: TypeError: pair is not a function at Object.car (/usr/local/lib/node_modules/hexlet-pairs-data/node_modules/hexlet-pairs/dist/index.js:35:10) at head (/usr/local/lib/node_modules/hexlet-pairs-data/dist/index.js:48:16) at rec (/usr/local/lib/node_modules/hexlet-pairs-data/dist/index.js:278:17) at rec (/usr/local/lib/node_modules/hexlet-pairs-data/dist/index.js:284:37) at toString (/usr/local/lib/node_modules/hexlet-pairs-data/dist/index.js:287:16) at rec (/usr/local/lib/node_modules/hexlet-pairs-data/dist/index.js:284:12) at toString (/usr/local/lib/node_modules/hexlet-pairs-data/dist/index.js:287:16) at rec (/usr/local/lib/node_modules/hexlet-pairs-data/dist/index.js:284:12) at toString (/usr/local/lib/node_modules/hexlet-pairs-data/dist/index.js:287:16) at Context.<anonymous> (test.js:22:18)

У меня пока не сложилось понимание, почему конструкция 

return append(cons(num, head(num2)), tail(num2));

выдаёт ошибку, а вот эта нет: 

return cons(head(num), append(tail(num), num2)); ...

  1. Читал Ваши рекомендации про максимальный отказ от циклов в рамках курса. Второй тест пройден. Переделаю его в рамках рекомендации.
0

Александр О.

Добрый день! Давайте с другой стороны подойдём (если мой намёк был непонят ;)) - просто замените в вашей вышеприведённой реализации reverse функцию l на функцию cons - и проанализируйте, что и почему так получилось.

0

SERGEY CHIRVA

Спасибо за помощь! Разобрался.

1

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

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

Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия
Разработка фронтенд-компонентов веб-приложений
30 июня 10 месяцев
Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
30 июня 10 месяцев
Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
30 июня 10 месяцев
Иконка программы Node.js-разработчик
Профессия
Разработка бэкенд-компонентов веб-приложений
30 июня 10 месяцев
Иконка программы Fullstack-разработчик
Профессия
Новый
Разработка фронтенд и бэкенд компонентов веб-приложений
30 июня 16 месяцев
Иконка программы Верстальщик
Профессия
Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия
Разработка приложений на языке Java
30 июня 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
Создает веб-приложения со скоростью света
30 июня 5 месяцев