Преобразование функции с двумя рекурсивными вызовами в схеме, чтобы сделать ее хвостовой рекурсивной

Прежде чем я начну: ДА, это домашнее задание из колледжа. Прежде чем мне скажут, что я ленив и злой: эта часть домашнего задания заключалась в преобразовании двух функций, которые у нас уже были, это 6.

(define (flatten-list a-list)
  (cond ((null? a-list) '())
      ((list? (car a-list)) 
       (append (flatten-list (car a-list)) (flatten-list (cdr a-list))))
      (else (cons (car a-list) (flatten-list (cdr a-list))))))

Как вы можете догадаться, функция выравнивает список, даже если он вложен. Моя конкретная проблема с преобразованием заключается в условии (list? (Car a-list)), в котором я выполняю два рекурсивных вызова. Я уже делал фибоначчи, что я могу сделать, просто имея два «акуммулятора» на хвостовой рекурсии. Однако мой разум еще не обучен этому, чтобы знать, как это должно происходить.

Я был бы признателен, если бы мне дали подсказки, а не результат. Спасибо!

6
задан Bill the Lizard 16 December 2012 в 16:00
поделиться