Переполнение стека от рекурсивного вызова функции в Лиспе

Я учу Лисп из книги Конрада Барского "Земля Лисп". Теперь я столкнулся с моим первым камнем преткновения, где автор говорит:

Вызывать себя таким образом не только разрешено в Лиспе, но часто настоятельно рекомендуется

после показа следующего примера функции для подсчета элементов в списке:

(defun my-length (list)
  (if list
    (1+ (my-l,ength (cdr list)))
    0))

Когда я вызываю эту функциюmy-length со списком, содержащим миллион элементов, я получаю ошибку переполнения стека. Так что либо вы никогда не ожидаете иметь длинный список в Лиспе (так что, возможно, мой вариант использования бесполезен), либо есть другой способ подсчета элементов в таком длинном списке. Можете ли вы пролить свет на это? (Я использую GNU CLISP на Windows, кстати).

Ответы на вопрос(4)

Ваш ответ на вопрос