Вопрос №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
Насколько я понял, тут имеется ввиду что нужно применить операцию возведение в квадрат 2 раза то есть 52 = 25,252 = 625
Ошибка в том, что в качестве условия написано возведение в квадрат числа 2 пять раз, а в качестве проверки результат возведения числа 5 в квадрат два раза.
никакой ошибки нет, смотрите, вы выделили "Если 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)
У меня тот же ступор, можно объяснить эту же проблему другими словами? сделал решение (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
где я неправ?
Вы вместо того чтобы возвести 5 в квадрат (получится 25) и возвести полученный результат в квадрат( получится 625) возводите 2 в степень 2 в 5ой то есть 2 в 32 степень
Используйте Хекслет по максимуму!
- Задавайте вопросы по уроку
- Проверяйте знания в квизах
- Проходите практику прямо в браузере
- Отслеживайте свой прогресс
Зарегистрируйтесь или войдите в свой аккаунт
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.







