Что эквивалентно процедуре отдыха в SICP в схеме MIT 9.2?
Я выполняю упражнение 2.32, в котором представлен следующий код:
(define (subsets s)
(if (null? s)
(list nil)
(let ((rest (subsets (cdr s))))
(append rest (map <??> rest)))))
Когда я пытаюсь позвонить rest
процедура в схеме MIT 9.2 она не распознает процедуру (есть аналогичная проблема с nil
в книге, которая заменяется ()
в современной схеме). Что является эквивалентом rest
процедура в современной схеме? Я не верю, что это cdr
так как cdr
используется на протяжении всей книги.
2 ответа
Вы неправильно понимаете упражнение - rest
это не процедура, это локальная переменная, которая соответствует остальным подмножествам (возможно, вам следует взглянуть на документацию относительно let
). Вот что просит книга:
(define (subsets set)
(if (null? set)
(list '())
(let ((rest (subsets (cdr set))))
(append rest
(map (lambda (sets) (cons (car set) sets))
rest)))))
Как указывает @tfb, rest
в этом коде это не процедура, это локально связанный символ.
Возможно, вы неправильно интерпретируете сообщение об ошибке rest
; не видя этого, трудно сказать.