Ваш код содержит очень простую ошибку:
(defun listFormat (l)
(defun place-index (idx l) ; <<<---- This DEFUN is wrong
(if (null l)
nil
(append (list (first l)) (list idx)
(place-index (+ idx 1) (rest l)))))
(place-index 1 l))
Не вкладывать DEFUN.Это просто неправильно .DEFUN определяет глобальную функцию.Всякий раз, когда вы запускаете listFormat, он переопределяет функцию GLOBAL PLACE-INDEX.Возможно, вы видели подобные вложенные функции в SCHEME, используя DEFINE.В Common Lisp не следует использовать DEFUN для вложенной локальной функции.
В Lisp локальные функции определяются с помощью FLET или LABELS (для рекурсивных функций).
(defun listFormat (l)
(labels ((place-index (idx l)
(if (null l)
nil
(append (list (first l)) (list idx)
(place-index (+ idx 1) (rest l))))))
(place-index 1 l)))
Также Stackoverflow является неправильнымместо, чтобы решить свою домашнюю работу.Поиск в Google также является неправильным способом изучения программирования на Лиспе.
Я предлагаю использовать старый добрый способ чтения вводной книги и использования справочника.
Вот базовое введение Книга Lisp для скачивания: Common Lisp: Нежное введение в символьные вычисления .
Справочные листы : маленький Краткий справочник по Lisp * Краткий справочник (PDF) и более подробный Краткий справочник Common Lisp .
Пунктирные пары называются conses в Лиспе.
См. Настоящий онлайн-справочник по Common Lisp, Common Lisp HyperSpec .