<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	
	>
<channel>
	<title>Комментарии на: Некоторые особенности работы lisp</title>
	<atom:link href="https://autolisp.ru/2015/07/26/lisp-proceed-features/feed/" rel="self" type="application/rss+xml" />
	<link>https://autolisp.ru/2015/07/26/lisp-proceed-features/</link>
	<description>LISP для AutoCAD</description>
	<lastBuildDate>Tue, 24 Feb 2026 16:11:05 +0000</lastBuildDate>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.0</generator>
	<item>
		<title>От: Кулик Алексей aka kpblc</title>
		<link>https://autolisp.ru/2015/07/26/lisp-proceed-features/comment-page-1/#comment-57251</link>
		<dc:creator><![CDATA[Кулик Алексей aka kpblc]]></dc:creator>
		<pubDate>Tue, 25 Aug 2015 13:53:11 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=2927#comment-57251</guid>
		<description><![CDATA[А я где-то тут говорил о нескольких lsp? Я говорил о самовызове кода / функции? Я разве говорил о структуре lsp-файлов, последовательности их загрузки и т.п.?
Ладно, gomer, предлагаю считать, что ты крут и недосягаем :) Я не хочу спорить.]]></description>
		<content:encoded><![CDATA[<p>А я где-то тут говорил о нескольких lsp? Я говорил о самовызове кода / функции? Я разве говорил о структуре lsp-файлов, последовательности их загрузки и т.п.?<br />
Ладно, gomer, предлагаю считать, что ты крут и недосягаем <img src="https://autolisp.ru/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /> Я не хочу спорить.</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: gomer</title>
		<link>https://autolisp.ru/2015/07/26/lisp-proceed-features/comment-page-1/#comment-57235</link>
		<dc:creator><![CDATA[gomer]]></dc:creator>
		<pubDate>Mon, 24 Aug 2015 09:09:46 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=2927#comment-57235</guid>
		<description><![CDATA[Допустим есть три файла a.lsp b.lsp и c.lsp. в первом всего три строчки
(nentselp &#039;(0 0 0))
(/ 1 0)
(/ 0 1)
При загрузке a.lsp получим
Команда: (LOAD &quot;D:/VLISP/a - копия.lsp&quot;) ; ошибка: деление на нуль
То есть все, что после ошибки игнорируется. Синтаксических ошибок в коде нет... Более того, переменная ERRNO примет значение 7 (Object selection: pick failed)


В файле b.lsp всего одна строчка
(load &quot;c.lsp&quot;)
В файле c.lsp всего одна строчка
(load &quot;b.lsp&quot;)
Формально никаких ошибок нет в коде обеих файлов, но автокад упадет из-за рекурсивной загрузки этих двух лиспов.


Как правило в лисп-коде хранятся только определения функций, то есть вызывается только функция defun, поэтому возникает заблуждение, что лисп-код при загрузке не выполняется. Но если вставить в код вызов определенной в файле функции после описания функции, то она выполнится, если до, то произойдет ошибка (функция не определена).
На самом деле при загрузке лисп-файла лисп-код выполняется полностью и возвращается результат последнего вычисленного выражения. Если в коде есть ошибка, то загрузка/выполнение кода останавливается, возвращается сообщение об ошибке и переменная ERRNO получает соответствующее значение.
С другой стороны, действительно, функция defun воспринимает &quot;тело функции&quot;, свой &quot;последний аргумент&quot;, как единое выражение, которое не вычисляется, и проверяется только его синтаксис. Оно будет вычислено только при вызове определенной функции.
И еще не стоит забывать про функцию autoload которая загружает автоматически нужный лисп при вызове команды.
Ну и наконец, использование функции defun абсолютно не обязательно, если вы не сторонник структурного программирования. Достаточно на макрос повесить функцию load с соответствующим файлом и его код выполнится при нажатии на соответствующую кнопку.]]></description>
		<content:encoded><![CDATA[<p>Допустим есть три файла a.lsp b.lsp и c.lsp. в первом всего три строчки<br />
(nentselp '(0 0 0))<br />
(/ 1 0)<br />
(/ 0 1)<br />
При загрузке a.lsp получим<br />
Команда: (LOAD "D:/VLISP/a - копия.lsp") ; ошибка: деление на нуль<br />
То есть все, что после ошибки игнорируется. Синтаксических ошибок в коде нет... Более того, переменная ERRNO примет значение 7 (Object selection: pick failed)</p>
<p>В файле b.lsp всего одна строчка<br />
(load "c.lsp")<br />
В файле c.lsp всего одна строчка<br />
(load "b.lsp")<br />
Формально никаких ошибок нет в коде обеих файлов, но автокад упадет из-за рекурсивной загрузки этих двух лиспов.</p>
<p>Как правило в лисп-коде хранятся только определения функций, то есть вызывается только функция defun, поэтому возникает заблуждение, что лисп-код при загрузке не выполняется. Но если вставить в код вызов определенной в файле функции после описания функции, то она выполнится, если до, то произойдет ошибка (функция не определена).<br />
На самом деле при загрузке лисп-файла лисп-код выполняется полностью и возвращается результат последнего вычисленного выражения. Если в коде есть ошибка, то загрузка/выполнение кода останавливается, возвращается сообщение об ошибке и переменная ERRNO получает соответствующее значение.<br />
С другой стороны, действительно, функция defun воспринимает "тело функции", свой "последний аргумент", как единое выражение, которое не вычисляется, и проверяется только его синтаксис. Оно будет вычислено только при вызове определенной функции.<br />
И еще не стоит забывать про функцию autoload которая загружает автоматически нужный лисп при вызове команды.<br />
Ну и наконец, использование функции defun абсолютно не обязательно, если вы не сторонник структурного программирования. Достаточно на макрос повесить функцию load с соответствующим файлом и его код выполнится при нажатии на соответствующую кнопку.</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Кулик Алексей aka kpblc</title>
		<link>https://autolisp.ru/2015/07/26/lisp-proceed-features/comment-page-1/#comment-57024</link>
		<dc:creator><![CDATA[Кулик Алексей aka kpblc]]></dc:creator>
		<pubDate>Thu, 06 Aug 2015 17:40:16 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=2927#comment-57024</guid>
		<description><![CDATA[&gt;&gt; если в коде есть ошибка, то интерпретатор вернет ее и прервет загрузку кода
Если в коде есть &lt;strong&gt;синтаксическая&lt;/strong&gt; ошибка, то код не будет загружен - это да. Другие ошибки отслеживаться не будут.
Остальное не понял, хотя перечитывал не один и не два раза. Постарайся выразиться яснее, с учетом того, что прописано в тексте ))]]></description>
		<content:encoded><![CDATA[<p>>> если в коде есть ошибка, то интерпретатор вернет ее и прервет загрузку кода<br />
Если в коде есть <strong>синтаксическая</strong> ошибка, то код не будет загружен - это да. Другие ошибки отслеживаться не будут.<br />
Остальное не понял, хотя перечитывал не один и не два раза. Постарайся выразиться яснее, с учетом того, что прописано в тексте ))</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: gomer</title>
		<link>https://autolisp.ru/2015/07/26/lisp-proceed-features/comment-page-1/#comment-57019</link>
		<dc:creator><![CDATA[gomer]]></dc:creator>
		<pubDate>Thu, 06 Aug 2015 07:56:36 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=2927#comment-57019</guid>
		<description><![CDATA[Поправка: лисп-код ВСЕГДА &quot;срабатывает &quot; при загрузке! Причем если в коде есть ошибка, то интерпретатор вернет ее и прервет загрузку кода. Таким образом часть функций может быть не определена. Скажем так &quot;срабатывает&quot; - это некорректное определение. Код может вызываться и выполняться. При загрузке кода он выполняется. Вызывается из командной строки, меню и т.д. Более того, если в коде файла прописать безусловную загрузку самого себя, гарантированно получим вылет при загрузке. Поэтому я никогда ничего не выполняю при загрузке автокада, достаточно загрузить код, чтобы пользователь мог его вызвать.]]></description>
		<content:encoded><![CDATA[<p>Поправка: лисп-код ВСЕГДА "срабатывает " при загрузке! Причем если в коде есть ошибка, то интерпретатор вернет ее и прервет загрузку кода. Таким образом часть функций может быть не определена. Скажем так "срабатывает" - это некорректное определение. Код может вызываться и выполняться. При загрузке кода он выполняется. Вызывается из командной строки, меню и т.д. Более того, если в коде файла прописать безусловную загрузку самого себя, гарантированно получим вылет при загрузке. Поэтому я никогда ничего не выполняю при загрузке автокада, достаточно загрузить код, чтобы пользователь мог его вызвать.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
