Решение упражнения 2.21 из SICP

26 January, 2008 (19:42) | Разное

Еще одно несложное, но важное для понимания основ упражнение. Закончить определения процедуры 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