Вы получаете ошибку, потому что первая позиция в списке, который оценивается, как ожидается, будет именем функции. Например, в вашей ветке else:
((incf n) (vector-push-extend (char line n) temp-word))
(incf n)
должно быть именем функции, чтобы это было допустимо, но, очевидно, это не так. Если вы хотите поместить последовательность выражений, в которой разрешено только одно, обычное решение - progn
. Таким образом, ваша ветвь else станет:
(progn
(incf n)
(vector-push-extend (char line n) temp-word))
Хотя в этом случае вы могли бы использовать тот факт, что (incf n)
возвращает новое значение n
, поэтому вы также можете просто написать:
(vector-push-extend (char line (incf n)) temp-word)
Тогда ветвь должна также иметь progn
.
РЕДАКТИРОВАТЬ: альтернативная реализация всей функции
После того как я написал свой ответ выше, я прочитал ваше объяснение в комментарии о том, что должна делать функция. Как насчет реализации этого, как это?
(defun add-word-3 (start line)
(let ((end (position-if (lambda (char) (member char '(#\Newline #\Space)))
line
:start start)))
(vector-push-extend (subseq line start end) *word-array-2*)
end))