Прежде всего, это домашнее задание, но я просто ищу намек или псевдокод о том, как это сделать.Общая сумма баллов
Мне нужно суммировать все элементы в списке, используя рекурсия. Однако ему нужно вернуть пустой набор, если он встречает что-то в списке, который не является числом. Вот моя попытка:
(DEFINE sum-list
(LAMBDA (lst)
(IF (OR (NULL? lst) (NOT (NUMBER? (CAR lst))))
'()
(+
(CAR lst)
(sum-list (CDR lst))
)
)
)
)
Это не удается, потому что он не может добавить пустой набор к чему-то другому. Обычно я просто возвращаю 0, если это не число и продолжаю обрабатывать список.
Мне потребовалось много времени, чтобы выяснить, как это работает, особенно с двойным lst на второй линии. Я мог только представить версию с двумя параметрами. – rem45acp
Вы можете заменить (lst lst) на (lst2 let) и изменить каждое вхождение lst ниже, что с lst2; это может сделать его более ясным. В основном он создает локальную переменную let (или lst2), которая инициализируется значением исходного параметра lst. – uselpa