В настоящее время я пишу программу LISP, которая анализирует результаты CR в виде списков, таких как: ("I" 0 10 0 20) << (слово X0 X1 Y0 Y1) </p>
Она должна быть построенавесь текст, используя позиции слов.В моем коде есть кластерный анализатор, который обнаруживает кластерные макеты, такие как абзацы с выравниванием по левому краю или по правому краю или даже оба.Структура данных кластера выглядит следующим образом: («имя кластера» xline y0 y1 '(слова кластера))
Как добавить новую строку, пока я перебираю список строк и объединяю их в строку результатасоздать форматированный текст из этих?Пример:
"Hi,\n
\n
here is my entry\n
\n
Good bye"
Мой код выглядит следующим образом:
(defun print-formatted-text(txt)
(let
((size (array-total-size txt))
(sorted (sort (sort txt #'compare-mix) #'compare-generic2))
(result ""))
(loop for i from 0 to (1- size) do
(let ((el (aref sorted i)))
(if (word? el)
(setf result (concatenate 'string result (first el) " "))
(if (null (nth 7 el))
nil
(progn
(setf result (concatenate 'string result " "))
(dolist (curr (nth 7 el))
(setf result (concatenate 'string result (first curr) " "))))))))
result))
Если текущие данные не являются словом, то это абзац.Это означает, что мне нужно добавить новую строку, прежде чем я произнесу слова абзаца и после.
Правильно ли здесь используется конкатенация?
Спасибо за советы.