Вопрос №610 от пользователя Юрий Бацура в уроке «СИКП: Построение процедур с помощью lambda», курс «Структура и интерпретация компьютерных программ»

Юрий Бацура

Добрый день! В практическом задании к данному уроку обнаружена ошибка:

Если f это численная функция, и n это положительное целое число, то мы можем сформировать n-ное применение функции f: это функция, чье значение для х равно f(f(...(f(x))...)).

Например, если f это функция x = x + 1, то n-ное применение функции f это x = x + n. Если f это операция возведения во вторую степень, то n-ное применение функции f это возведение в степень 2n.

В файле repeated.rkt создайте процедуру, которая принимает в качестве аргумента другую процедуру (которая вычисляет f), и целое положительное число n; и возвращает процедуру, которая вычисляет n-ное применение функции f. В итоге вашу процедуру можно будет использовать следующим образом:

((repeated square 2) 5)
625

дело в том, что 225 = 232 = 4294967296, а не 625, соответственно код проверку не проходит

Вероятно, имелось в виду:

((repeated square 5) 2)
625
5 0

Антон Буренков

Насколько я понял, тут имеется ввиду что нужно применить операцию возведение в квадрат 2 раза то есть 52 = 25,252 = 625

0

Юрий Бацура

Ошибка в том, что в качестве условия написано возведение в квадрат числа 2 пять раз, а в качестве проверки результат возведения числа 5 в квадрат два раза.

0

Антон Буренков

никакой ошибки нет, смотрите, вы выделили "Если f это операция возведения во вторую степень, то n-ное применение функции f это возведение в степень 2n", если мы вызываем ((repeated square 2) 5) получается что число 5 мы возводим в степень 4, так как n = 2, а функция square = 2n. То есть получается (repeated square 2) - мы возвращаем функцию, которая возводит в 4ую степень, назовем ее doublesqare, ((repeated square 2) 5) тогда можно представить в таком виде (doublesquare 5)

0

Максим Русляченко

У меня тот же ступор, можно объяснить эту же проблему другими словами? сделал решение (define (repeated f x n) (if (= n 1) (f x) (f (repeated f x (- n 1))))) ;; END все работает кроме этого теста (check-equal? ((repeated square 2) 5) 625) у меня (repeated square 2 5) 4294967296

где я неправ?

0

Антон Буренков

Вы вместо того чтобы возвести 5 в квадрат (получится 25) и возвести полученный результат в квадрат( получится 625) возводите 2 в степень 2 в 5ой то есть 2 в 32 степень

0

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

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

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

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

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

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

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