Ваши парни неверны (см. Ниже)
(define (parse-homework homework-entries)
(if (and (= (length (first homework-entries) 2)) ;; <---- Parens wrong here
(= (length (parse-homework (rest homework-entries)) 2))) ;; <---- ... and here
(make-homework (first homework-entries) (parse-homework (rest homework-entries)))
(error 'Non-valid-input "entered list is not of length two"))
)
Вам нужно вызвать функцию length
с одним, функцию =
с двумя аргументами:
(= (length (first homework-entries)) 2)
Аналогично для другой отмеченной строки.
Редактировать Когда вы анализируете список домашних заданий, подумайте:
- Когда вы проанализировали все элементы
homework-entries
? Т.е. когда вам нужно прекратить повторение? (null?
) Ошибки говорят сами за себя: список ввода исчерпан.
- Каков предполагаемый результат применения
parse-homework
к списку предметов в соответствии с вашим примером? Вы на самом деле не генерируете значимый результат.
Попробуйте разбить проблему на более мелкие части:
(define (parse-homework-item item)
;; Parse a single homework item, returning an instance of the
;; Homework type for it.
...)
(define (parse-homework list-of-items)
;; Loop over the elements of list-of-items, processing each in turn
;; using parse-homework-item. Collect each result object into a list
;; which is returned as final result.
...)