О рекурсиях в списках

(define (some n)
 (cond
 [(empty? n) false]
 [(cons? n)
 (+ (first n) 1)]))

У меня проблемы с рекурсией. Он добавляет 1 к первому элементу списка. Как добавить его в остальную часть списка и объединить ответ?

1 ответ

Есть несколько проблем с вашим кодом, вы должны получить правильный шаблон для перемещения списка ввода и построения выходного списка в качестве ответа:

(define (some n)
 (cond
 [(empty? n) ; if the list is empty
 empty] ; return the empty list, not false!
 [else ; if it not empty, then it a list
 (cons (+ (first n) 1) ; cons the new element
 (some (rest n)))])) ; and advance the recursion

Базовые шаги всегда одинаковы: спросите, имеет ли список нуль, cons текущий элемент, продвигайте рекурсию по остальной части списка. Конкретные детали будут меняться в зависимости от проблемы, но указанный выше шаблон поможет вам на правильном пути большую часть времени. Теперь результатом будет новый список со всеми его элементами, увеличивающимися на единицу:

(some '(1 2 3 4 5))
=> '(2 3 4 5 6)

licensed under cc by-sa 3.0 with attribution.