2016-05-10 4 views
-3

(define changeit (lambda (x) (* x x))) (define changeall (lambda (x) (if (null? x) '() (cons (changeit (car x)) (changeall (cdr x)))))) (changeit 8) (changeit 9) (changeall '(2 14 10 8))Я не уверен, что этот код пытается сделать

Я не совсем уверен, что changeall делает, может кто-нибудь объяснить это?

EDIT: Вот остальная часть кода

+0

Я рекомендую вам запустить его в своем REPL. Мы не можем знать, потому что мы не знаем, что делает «changei». – Rptx

+0

Это 'карта', что' square 'все элементы своего входного списка. Вот так. –

ответ

0

Хотя комментарий Оскар Лопес подытоживает, что происходит, этот ответ немного подробнее. changeit - это просто функция x^2. changeall - функция одного аргумента. Если этот аргумент является пустым списком ((null? x)), функция возвращает пустой список. В противном случае changeall вычисляет квадрат первого элемента его списка аргументов ((car x)) и добавляет его к результату вызова changeall с остальной частью его списка начальных аргументов ((cdr x)). Это вызов рекурсивной функции. В какой-то момент список аргументов будет исчерпан, т. Е. Аргумент будет пустым списком, а changeall вернет пустой список (первый случай, который мы рассмотрели). На этом этапе рекурсия остановится.

Смежные вопросы