Решение упражнения 2.21 из SICP
Еще одно несложное, но важное для понимания основ упражнение. Закончить определения процедуры square-list можно таким образом:
(define (square-list items) (if (null? items) nil (cons (square (car items)) (square-list (cdr items)))))
(define (square-list items) (map square items))
Как видите, использование процедуры обобщенного отображения списков здорово упрощает жизнь.
Хочу сделать замечание по синтаксису Scheme в отношении значения nil. Я пользуюсь DrScheme, в котором значение nil не определено. Вместо него есть null, обозначающее, по всей видимости, то же самое, что и nil в книге, а также синоним () для него, обозначающий пустой список, который иногда более удобно указывать при работе со списками. Для того, чтобы пример из книги отрабатывал as is, я определил nil как псевдоним для null:
(define nil null)
В дальнейшем в своих решениях я буду свободно пользоваться этими разными формами записи для семантически эквивалентных вещей, не обращая на них лишнего внимания.
Write a comment