Как я могу использовать больше, чем выражение "return" в следующем фрагменте кода? - PullRequest
0 голосов
/ 26 апреля 2019

В моем состоянии else у меня есть два оператора для выполнения. Первый должен добавить мой расчет в мой список возврата, а второй снова вызывает мою рекурсивную процедуру. Проблема в том, что моя процедура добавления игнорируется, поэтому я просто возвращаю пустой список.

(define (calcit x lst)
    (cond ((= x 0)
           retlst)
           (else (append (list (floor (/ x (first lst)))) retlst)
                 (calcit (modulo x (first lst)) (rest lst)))))

1 Ответ

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

Вам нужно что-то сделать с данными, которые вы создаете. Возможно, вы хотите, чтобы первый элемент был обработан в результате списка, полученного из рекурсии:

(define (calcit x lst)
  (if (= x 0) 
      '() ;; base case
      (cons (floor (/ x (first lst)))
            (calcit (modulo x (first lst)) (rest lst)))))

При создании списков в Схеме с рекурсией старайтесь избегать append. Использование append - это анти-паттерн. Узнайте, как работают списки Схемы, и обучайтесь, чтобы знать это близко. например, '((2 3) (4 5)), если я спрашиваю вас, как получить 5, вы должны подумать о том, чтобы ответить и ответить cadadr почти сразу.

...