Спасибо за корректировки. Очень поучающе.
Во-вторых, на каком конкретном месте ошибка? Наверное, на print? Которому надо подставлять строку и только строку, а ты выдаешь что-то непонятное? vl-princ-to-string используй для подобного "контроля".
После корректировок ругаться перестал, т.е. print работает не только со строками. В подтверждении сказанному нашёл полезным ещё один справочник по стандартным функциям AutoLIP, из которого и цитирую:
http://aco.ifmo.ru/~nadinet/html/other/lsp_book/lisp.html#_Toc465260963(print <выражение> [<описатель файла>])
Эта функция похожа на PRIN1, кроме того что <выражение> печатается с новой строки, а после <выражения> ставится пробел.
(prin1 <выражение> [<описатель файла>])
Эта функция выводит выражение <выражение> на экран и возвращает <выражение>. <выражение> может быть любым выражением; не требуется, чтобы оно было строковой константой. Если присутствует <описатель файла> (и является описателем файла, открытого для записи), <выражение> записывается в файл в то время, как оно появляется на экране. Печатается только указанное <выражение>; не включается никаких пробелов и переходов на новую строку.
А вот и код, который теперь стал рабочим:
(setq kit (ssget "_X" '((0 . "INSERT"))))
(sslength kit)
(setq i 0)
(while (< i (sslength kit))
(setq kit0 (entget(ssname kit i)))
(print (ssname kit i))
(setq i(+ i 1))
)
Вопросы, которые возникают:
1. У каждого чертежа свой редактор, где прописываются команды и между собой не пересекаются?
2. Если в ходе работы с командной строкой переменных будет много, то ориентир в них будет затрудняться. Есть ли интерфейс, благодаря можно увидеть, какие переменные сейчас лежат в буфере чертежа и какую информацию они хранят? Сохраняются ли данные переменные в чертеже?
3. Функции вида "vl-..." визуально выделяются от функций autolisp. Предположу, что это функции visual lisp. Прошу дать комментарий касательно данных двух подвидов: кто это, чем отличаются, с чем едят?
4. Есть ли подобный справочник по функциям вида "vl-"?
Нашёл один:
http://www.cad.dp.ua/stats/vlisp.phpно возможно есть более подробный?
5. Тем не менее вернёмся к vl-princ-to-string, раз уж про него заговорили.
(setq el (ssget)) ; Выберите объекты: Противоположный угол: найдено: 3
; Выберите объекты:
; <Selection set: 375>
(vl-princ-to-string el) ;"<Selection set: 375>"
Есть ли какой-то классификатор в наименовании набора (например, "375") или просто шальная группа цифр?
Как понимаю я преобразовал набор el в список? А как я могу это проверить? Частично отсылка к вопросу 2.
6.
В-третьих, есть значительно более простой вариант преобразования набора в список:
(vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
тут я долго пытался понять, что это за чудо-юдо. Проверьте меня, потому что информацию пришлось черпать с каждого мира по ложке (может подскажите, где есть один! источник с описанием всех функций):
6.1. (VL-REMOVE-IF '<"предикат"> <"список">) - удаляет все элементы из списка, которые соответствуют условию.
Источник:
http://www.cad.dp.ua/stats/vlisp.php (Список функций Visual Lisp).
6.2. Предикат listp - проверяет, является ли аргумент списком.
Источник:
http://cybern.ru/lisp-predicat.html (предикаты в LISP).
6.3. (mapcar '<функция> <список1> [<список2> … <списокN>]) - поочередно применяет <функцию> сначала к первым элементам списков, затем ко втором и так далее. В результате образуется новый список, который и является возвращаемым значением.
Источник:
https://acad-prog.ru/spravochnik-autolisp-funktsij-po-alfavitu/#entget (СПРАВОЧНИК AUTOLISP ФУНКЦИЙ).
6.4. cadr = (car (cdr *)), где cdr - вычисление хвоста списка, car - вычисление головы списка.
Источник:
http://catstail.narod.ru/homelisp/classic_funct.html#CADR (Описание встроенных функций HomeLisp). При чём тут HomeLisp? Но нигде более не смог найти cadr.
6.5. (ssnamex <набор> [<номер>]) - извлечение примитива из набора по порядковому номеру (заданных соответствующими аргументами <набор> и <номер>), но при этом выдается дополнительная информация о методах формирования набора (см. ниже); если аргумент <номер> опущен, то выводится информация обо всех примитивах набора.
Источник:
http://www.intuit.ru/studies/courses/2331/631/lecture/13719?page=7 (Лекция 3: AutoLISP в среде Visual LISP).
Чем отличается ssnamex от ssname?
Если я нашёл правильные объяснения, то я попробую их соединить у себя в голове и понять, как эта функция работает.