Функция Scheme, которая возвращает самый короткий из двух списков - PullRequest
0 голосов
/ 05 декабря 2018

вы должны вернуть функцию, которая возвращает короче из двух списков.Написал такую ​​функцию, но есть ошибка:

else: не допускается как выражение в: (else (sh (cdr shA) (cdr shB)))

Я не знаю, как это исправить.

(define (shorter a b)
  (let sh ((shA a) (shB b))
    (cond
      (((null? shA) a)
       ((null? shB) b)
       (else (sh (cdr shA) (cdr shB)))))))

1 Ответ

0 голосов
/ 05 декабря 2018

У вас слишком много скобок - это целое выражение:

(((null? shA) a)
 ((null? shB) b)
 (else (sh (cdr shA) (cdr shB))))

, и вы не можете иметь else в этой позиции.

Синтаксис (cond clause1 clause2 ...), а не (cond (clause1 clause2 ...)), поэтому вам нужно

(define (shorter a b)
  (let sh ((shA a) (shB b))
    (cond
       ((null? shA) a)
       ((null? shB) b)
       (else (sh (cdr shA) (cdr shB))))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...