Я пытаюсь сформулировать процедуру, которая присоединяет число к набору чисел, упорядоченных от наименьшего к наибольшему.В этом наборе нет дубликатов, поэтому я попытался рекурсивно решить эту проблему, проверив, равно ли число, к которому присоединяется число, уже car
набора, и вернул набор, если возвращается значение true, и еслиномер больше, чем car
набора, если бы снова выполнить процедуру с номером и cdr
набора.Если набор равен нулю, он присоединяется к числу с набором, потому что мы знаем, что номер не равен никакому другому числу в наборе.
Вот код, который я написал:
(define (adjoin-set x set)
(if (null? set)
(cons x set)
(let (x1 (car set))
(cond ((= x x1) set)
((> x x1)(adjoin-set x (cdr set)))
(else (cons x set))))))
Я проверил это по набору шансов: (define odds '(1 3 5)) (adjoin-set 7 odds)
и интерпретатор вернул следующее: Error: let: need a pair for bindings: got x1 []
.Может кто-нибудь объяснить, почему это было возвращено и как это исправить?