Почему моя процедура установки смежности в Scheme возвращает ошибку? - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь сформулировать процедуру, которая присоединяет число к набору чисел, упорядоченных от наименьшего к наибольшему.В этом наборе нет дубликатов, поэтому я попытался рекурсивно решить эту проблему, проверив, равно ли число, к которому присоединяется число, уже 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 [].Может кто-нибудь объяснить, почему это было возвращено и как это исправить?

1 Ответ

1 голос
/ 22 апреля 2019

Синтаксис вашего let выражения неверен, в нем отсутствует пара ().Это должно быть так:

(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))))))

Вы можете определить несколько пар переменная / значение в объявлении let, самые внешние скобки предназначены для группировки их всех вместе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...