В процедуре help
базовый случай неверен - если выходные данные являются списком, вы должны вернуть список. И на рекурсивном шаге num
не является процедурой, поэтому она не должна быть заключена в квадратные скобки:
(define (help num)
(if (<= num 0)
'()
(cons num (help (- num 1)))))
И в list-expand
оба рекурсивных шага неверны. Вам просто нужно проверить, пуст ли список или нет, вызывая help
с правильным количеством параметров; используйте append
для объединения результатов, потому что мы объединяем подсписки вместе:
(define (list-expand L)
(if (empty? L)
'()
(append (help (car L)) (list-expand (cdr L)))))
Это должно работать как ожидалось, но, пожалуйста, потратьте некоторое время на изучение синтаксиса Схемы, у вас все еще есть проблемы с основами, для случай, когда и где использовать скобки ...
(list-expand '(3 2))
=> '(3 2 1 2 1)