<?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>Комментарии на: Анонимные (lambda) функции</title>
	<atom:link href="https://autolisp.ru/2009/09/16/lambda-functions/feed/" rel="self" type="application/rss+xml" />
	<link>https://autolisp.ru/2009/09/16/lambda-functions/</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>От: Александр Токарев</title>
		<link>https://autolisp.ru/2009/09/16/lambda-functions/comment-page-1/#comment-3551</link>
		<dc:creator><![CDATA[Александр Токарев]]></dc:creator>
		<pubDate>Sun, 19 Sep 2010 07:37:01 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=66#comment-3551</guid>
		<description><![CDATA[Лямбда-вызов может быть вообще без аргументов:
[cc lang=&quot;lisp&quot;]
((lambda ([/ &lt;локальные символы&gt;]) &lt;выражения&gt;))
[/cc]
Это похоже на выполнение нескольких выражений с помощью функции progn:
[cc lang=&quot;lisp&quot;]
(progn &lt;выражения&gt;)
[/cc]
С той разницей, что в лямбда-вызове можно объявить локальные символы, которые действуют только внутри тела (выражений) лямбда-вызова.

Еще один пример, где лямдба-вызов без аргументов решает задачу квадратуры круга :) и возвращает число pi:
[cc lang=&quot;lisp&quot;]
((lambda (/ a b S) ;;Squaring the circle (©Li6-D)
   (setq a (sqrt 2) b &#039;(1 . 1) S 3)
   (while (&gt; (cdr b) 0)
     (setq b (cons (sqrt (* (car b) a))
               (* 0.5 (1- (/ a (setq a (* 0.5 (+ a (car b)))))) (cdr b)))
           S (- S (cdr b))
   ) )
   (/ (* 2 a (car b)) (- S 2))
))
[/cc]]]></description>
		<content:encoded><![CDATA[<p>Лямбда-вызов может быть вообще без аргументов:</p>
<div class="codecolorer-container lisp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;"><div>1<br /></div></td><td><div class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;"><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span>/ <span style="color: #66cc66;">&lt;</span>локальные символы<span style="color: #66cc66;">&gt;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&lt;</span>выражения<span style="color: #66cc66;">&gt;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></div></td></tr></tbody></table></div>
<p>Это похоже на выполнение нескольких выражений с помощью функции progn:</p>
<div class="codecolorer-container lisp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;"><div>1<br /></div></td><td><div class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">progn</span> <span style="color: #66cc66;">&lt;</span>выражения<span style="color: #66cc66;">&gt;</span><span style="color: #66cc66;">&#41;</span></div></td></tr></tbody></table></div>
<p>С той разницей, что в лямбда-вызове можно объявить локальные символы, которые действуют только внутри тела (выражений) лямбда-вызова.</p>
<p>Еще один пример, где лямдба-вызов без аргументов решает задачу квадратуры круга <img src="https://autolisp.ru/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /> и возвращает число pi:</p>
<div class="codecolorer-container lisp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;"><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>/ a b S<span style="color: #66cc66;">&#41;</span> <span style="color: #808080; font-style: italic;">;;Squaring the circle (©Li6-D)</span><br />
&nbsp; &nbsp;<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setq</span> a <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">sqrt</span> <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span> b '<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">.</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> S <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp;<span style="color: #66cc66;">&#40;</span>while <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&gt;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> b<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setq</span> b <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">sqrt</span> <span style="color: #66cc66;">&#40;</span>* <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> b<span style="color: #66cc66;">&#41;</span> a<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #66cc66;">&#40;</span>* <span style="color: #cc66cc;">0.5</span> <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span>- <span style="color: #66cc66;">&#40;</span>/ a <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setq</span> a <span style="color: #66cc66;">&#40;</span>* <span style="color: #cc66cc;">0.5</span> <span style="color: #66cc66;">&#40;</span>+ a <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;S <span style="color: #66cc66;">&#40;</span>- S <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp;<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp;<span style="color: #66cc66;">&#40;</span>/ <span style="color: #66cc66;">&#40;</span>* <span style="color: #cc66cc;">2</span> a <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>- S <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></div></td></tr></tbody></table></div>
]]></content:encoded>
	</item>
	<item>
		<title>От: Кулик Алексей aka kpblc</title>
		<link>https://autolisp.ru/2009/09/16/lambda-functions/comment-page-1/#comment-3528</link>
		<dc:creator><![CDATA[Кулик Алексей aka kpblc]]></dc:creator>
		<pubDate>Thu, 16 Sep 2010 19:38:15 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=66#comment-3528</guid>
		<description><![CDATA[Спасибо :)]]></description>
		<content:encoded><![CDATA[<p>Спасибо <img src="https://autolisp.ru/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Александр Токарев</title>
		<link>https://autolisp.ru/2009/09/16/lambda-functions/comment-page-1/#comment-3527</link>
		<dc:creator><![CDATA[Александр Токарев]]></dc:creator>
		<pubDate>Thu, 16 Sep 2010 18:49:48 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=66#comment-3527</guid>
		<description><![CDATA[Одно дополнение по лямбда-функции.

Классикой использования лямбда-функции можно назвать так называемый лямбда-вызов в следующем формате:

[cc lang=&quot;cadlisp&quot;]((lambda (&lt;аргументы&gt; [/ &lt;локальные символы&gt;]) &lt;выражения&gt;) &lt;значения&gt;)[/cc]

Вычисляется лямбда-вызов так (сам процесс называется лямбда-преобразованием):
1) сначала аргументам присваиваются соответствующие значения, при этом количество значений должно быть равно количеству аргументов, иначе будет выдано сообщение об ошибке;
2) затем вычисляются выражения лямбда-функции и возвращается результат вычисления самого последнего выражения.
Заметим, что в выражении lambda-функции могут содержаться, как и в выражении именованной (defun) функции, локальные символы.

К сожалению в справке ACAD по функциям AutoLISP и в наиболее известных книгах по AutoLISP, примеры с лямдба-вызовом не рассматриваются (как правило приводятся примеры её использования совместно с mapcar и apply).
Мало того, в справочном описании функции обычно ошибочно утверждается, что она возвращает результат вычисления самого последнего выражения. Как было выше сказано, что этот результат возвращает лямбда-вызов.
Сама же lambda-функция возвращает имя указателя lambda-функции наподобие следующего:
[cc lang=&quot;cadlisp&quot;]&lt;#SUBR @09bc7118 -lambda-&gt;[/cc].
В книгах по другим диалектам LISP лямбда-вызов рассмотрен достаточно подробно, например в знаменитом двухтомнике
Э.Хювёнена и Й.Сеппеянена &quot;Мир Лиспа&quot; (том 1 стр.106-107).

А теперь две иллюстрации:
[cc lang=&quot;lisp&quot;]
;;;Использование lambda-функции для нахождения факториала.
;;;В данном случае возвращается 479001600=12!.
((lambda (n)
   (repeat (car (setq n (list n 1)))
     (setq n (list (1- (car n)) (apply &#039;* n)))
   )
   (cadr n)
 )
 ;;Целое число:
 12
)
[/cc]
[cc lang=&quot;lisp&quot;]
;;;Использование lambda-вызова для нахождения периметра эллипса
;;;с известными полуосями (©Li6-D).
((lambda (a b / S)
   (setq S (mapcar &#039;abs (list a b)) a (apply &#039;max S) b (apply &#039;min S))
   (if (zerop b) (* 4 a)
     (progn
       (setq S (mapcar &#039;* S S) b (list b (abs (apply &#039;- S))) S (apply &#039;+ S))
       (while (&gt; (cadr b) 0)
         (setq b (list
                   (sqrt (* (car b) a))
                   (* 0.5 (1- (/ a (setq a (* 0.5 (+ a (car b)))))) (cadr b))
                 )
               S (- S (cadr b))
       ) )
       (/ (* pi S) a)
 ) ) )
 ;;Длины полуосей эллипса:
 3
 5
)
[/cc]]]></description>
		<content:encoded><![CDATA[<p>Одно дополнение по лямбда-функции.</p>
<p>Классикой использования лямбда-функции можно назвать так называемый лямбда-вызов в следующем формате:</p>
<div class="codecolorer-container cadlisp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;"><div>1<br /></div></td><td><div class="cadlisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;"><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span>аргументы<span style="color: #66cc66;">&gt;</span> <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">/</span> <span style="color: #66cc66;">&lt;</span>локальные символы<span style="color: #66cc66;">&gt;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&lt;</span>выражения<span style="color: #66cc66;">&gt;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&lt;</span>значения<span style="color: #66cc66;">&gt;</span><span style="color: #66cc66;">&#41;</span></div></td></tr></tbody></table></div>
<p>Вычисляется лямбда-вызов так (сам процесс называется лямбда-преобразованием):<br />
1) сначала аргументам присваиваются соответствующие значения, при этом количество значений должно быть равно количеству аргументов, иначе будет выдано сообщение об ошибке;<br />
2) затем вычисляются выражения лямбда-функции и возвращается результат вычисления самого последнего выражения.<br />
Заметим, что в выражении lambda-функции могут содержаться, как и в выражении именованной (defun) функции, локальные символы.</p>
<p>К сожалению в справке ACAD по функциям AutoLISP и в наиболее известных книгах по AutoLISP, примеры с лямдба-вызовом не рассматриваются (как правило приводятся примеры её использования совместно с mapcar и apply).<br />
Мало того, в справочном описании функции обычно ошибочно утверждается, что она возвращает результат вычисления самого последнего выражения. Как было выше сказано, что этот результат возвращает лямбда-вызов.<br />
Сама же lambda-функция возвращает имя указателя lambda-функции наподобие следующего:</p>
<div class="codecolorer-container cadlisp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;"><div>1<br /></div></td><td><div class="cadlisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;"><span style="color: #66cc66;">&lt;</span>#SUBR @09bc7118 <span style="color: #66cc66;">-</span>lambda<span style="color: #66cc66;">-&gt;</span></div></td></tr></tbody></table></div>
<p>.<br />
В книгах по другим диалектам LISP лямбда-вызов рассмотрен достаточно подробно, например в знаменитом двухтомнике<br />
Э.Хювёнена и Й.Сеппеянена "Мир Лиспа" (том 1 стр.106-107).</p>
<p>А теперь две иллюстрации:</p>
<div class="codecolorer-container lisp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br /></div></td><td><div class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;"><span style="color: #808080; font-style: italic;">;;;Использование lambda-функции для нахождения факториала.</span><br />
<span style="color: #808080; font-style: italic;">;;;В данном случае возвращается 479001600=12!.</span><br />
<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>n<span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp;<span style="color: #66cc66;">&#40;</span>repeat <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setq</span> n <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> n <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setq</span> n <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span>- <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> n<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">apply</span> '* n<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp;<span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp;<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cadr</span> n<span style="color: #66cc66;">&#41;</span><br />
&nbsp;<span style="color: #66cc66;">&#41;</span><br />
&nbsp;<span style="color: #808080; font-style: italic;">;;Целое число:</span><br />
&nbsp;<span style="color: #cc66cc;">12</span><br />
<span style="color: #66cc66;">&#41;</span></div></td></tr></tbody></table></div>
<div class="codecolorer-container lisp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br /></div></td><td><div class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;"><span style="color: #808080; font-style: italic;">;;;Использование lambda-вызова для нахождения периметра эллипса</span><br />
<span style="color: #808080; font-style: italic;">;;;с известными полуосями (©Li6-D).</span><br />
<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>a b<span style="color: #66cc66;"> / </span>S<span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp;<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setq</span> S <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">mapcar</span> '<span style="color: #b1b100;">abs</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> a b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> a <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">apply</span> '<span style="color: #b1b100;">max</span> S<span style="color: #66cc66;">&#41;</span> b <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">apply</span> '<span style="color: #b1b100;">min</span> S<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp;<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">zerop</span> b<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>* <span style="color: #cc66cc;">4</span> a<span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">progn</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setq</span> S <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">mapcar</span> '* S S<span style="color: #66cc66;">&#41;</span> b <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> b <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">abs</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">apply</span> '- S<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> S <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">apply</span> '+ S<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #66cc66;">&#40;</span>while <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&gt;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cadr</span> b<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setq</span> b <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">sqrt</span> <span style="color: #66cc66;">&#40;</span>* <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> b<span style="color: #66cc66;">&#41;</span> a<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #66cc66;">&#40;</span>* <span style="color: #cc66cc;">0.5</span> <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span>- <span style="color: #66cc66;">&#40;</span>/ a <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setq</span> a <span style="color: #66cc66;">&#40;</span>* <span style="color: #cc66cc;">0.5</span> <span style="color: #66cc66;">&#40;</span>+ a <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cadr</span> b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;S <span style="color: #66cc66;">&#40;</span>- S <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cadr</span> b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #66cc66;">&#40;</span>/ <span style="color: #66cc66;">&#40;</span>* pi S<span style="color: #66cc66;">&#41;</span> a<span style="color: #66cc66;">&#41;</span><br />
&nbsp;<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span><br />
&nbsp;<span style="color: #808080; font-style: italic;">;;Длины полуосей эллипса:</span><br />
&nbsp;<span style="color: #cc66cc;">3</span><br />
&nbsp;<span style="color: #cc66cc;">5</span><br />
<span style="color: #66cc66;">&#41;</span></div></td></tr></tbody></table></div>
]]></content:encoded>
	</item>
	<item>
		<title>От: Михаил</title>
		<link>https://autolisp.ru/2009/09/16/lambda-functions/comment-page-1/#comment-2270</link>
		<dc:creator><![CDATA[Михаил]]></dc:creator>
		<pubDate>Thu, 29 Apr 2010 10:28:03 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=66#comment-2270</guid>
		<description><![CDATA[Спасибо за обзор, только приступаю к изучению, очень все полезно. В общем еще раз большущее спасибо.]]></description>
		<content:encoded><![CDATA[<p>Спасибо за обзор, только приступаю к изучению, очень все полезно. В общем еще раз большущее спасибо.</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Кулик Алексей aka kpblc</title>
		<link>https://autolisp.ru/2009/09/16/lambda-functions/comment-page-1/#comment-614</link>
		<dc:creator><![CDATA[Кулик Алексей aka kpblc]]></dc:creator>
		<pubDate>Thu, 08 Oct 2009 19:04:35 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=66#comment-614</guid>
		<description><![CDATA[Да, спасибо, исправляю :) Что значит привычка к быстрому завершению слова :)]]></description>
		<content:encoded><![CDATA[<p>Да, спасибо, исправляю <img src="https://autolisp.ru/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /> Что значит привычка к быстрому завершению слова <img src="https://autolisp.ru/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Do$</title>
		<link>https://autolisp.ru/2009/09/16/lambda-functions/comment-page-1/#comment-584</link>
		<dc:creator><![CDATA[Do$]]></dc:creator>
		<pubDate>Tue, 06 Oct 2009 12:06:52 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=66#comment-584</guid>
		<description><![CDATA[&quot;b&quot; и &quot;d&quot; в названии...]]></description>
		<content:encoded><![CDATA[<p>"b" и "d" в названии...</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: ElpanovEvgeniy</title>
		<link>https://autolisp.ru/2009/09/16/lambda-functions/comment-page-1/#comment-489</link>
		<dc:creator><![CDATA[ElpanovEvgeniy]]></dc:creator>
		<pubDate>Sat, 26 Sep 2009 11:05:16 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=66#comment-489</guid>
		<description><![CDATA[Я согласен с Владимиром!

Lambda функции, это абстракции второго порядка, по сравнению с обычными функциями!

Для примера, напишем простую функцию:

[cc lang=&quot;lisp&quot;](defun f (a) (1- (* a 2)))[/cc]

Если ее необходимо применить к списку, то код будет выглядеть:

[cc lang=&quot;lisp&quot;](mapcar (function f) &#039;(1 2 3 4))[/cc]

Здесь все отлично. Мы создали дополнительную абстракцию, которая на входе берет число, а на выходе возвращает результат вычислений ((Х * 2) - 1), где Х - наше число. 
Но, если мы будем использовать эту функцию только один раз, точнее, только для одного списка, то нам незачем регистрировать новую функцию и ее имя в документе. Вот здесь, нам и может понадобиться абстракция второго порядка - временная функция без имени. Из плюсов, более быстрая загрузка, меньший расход памяти, описание функции непосредственно в месте использования. Из минусов, не каждый сразу начинает понимать смысл и побаивается использовать...

C использованием безымянной функции, этот код будет выглядеть:

[cc lang=&quot;lisp&quot;](mapcar (function (lambda (a) (1- (* a 2)))) &#039;(1 2 3 4))[/cc]

И еще, можно дать безымянной функции имя и потом многократно его использовать:

[cc lang=&quot;lisp&quot;](setq f (lambda (a) (1- (* a 2))))

(mapcar (function f) &#039;(1 2 3 4))
(mapcar (function f) &#039;(5 6 7 8))[/cc]]]></description>
		<content:encoded><![CDATA[<p>Я согласен с Владимиром!</p>
<p>Lambda функции, это абстракции второго порядка, по сравнению с обычными функциями!</p>
<p>Для примера, напишем простую функцию:</p>
<div class="codecolorer-container lisp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;"><div>1<br /></div></td><td><div class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defun</span> f <span style="color: #66cc66;">&#40;</span>a<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span>- <span style="color: #66cc66;">&#40;</span>* a <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></div></td></tr></tbody></table></div>
<p>Если ее необходимо применить к списку, то код будет выглядеть:</p>
<div class="codecolorer-container lisp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;"><div>1<br /></div></td><td><div class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">mapcar</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">function</span> f<span style="color: #66cc66;">&#41;</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></div></td></tr></tbody></table></div>
<p>Здесь все отлично. Мы создали дополнительную абстракцию, которая на входе берет число, а на выходе возвращает результат вычислений ((Х * 2) - 1), где Х - наше число.<br />
Но, если мы будем использовать эту функцию только один раз, точнее, только для одного списка, то нам незачем регистрировать новую функцию и ее имя в документе. Вот здесь, нам и может понадобиться абстракция второго порядка - временная функция без имени. Из плюсов, более быстрая загрузка, меньший расход памяти, описание функции непосредственно в месте использования. Из минусов, не каждый сразу начинает понимать смысл и побаивается использовать...</p>
<p>C использованием безымянной функции, этот код будет выглядеть:</p>
<div class="codecolorer-container lisp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;"><div>1<br /></div></td><td><div class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">mapcar</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">function</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>a<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span>- <span style="color: #66cc66;">&#40;</span>* a <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></div></td></tr></tbody></table></div>
<p>И еще, можно дать безымянной функции имя и потом многократно его использовать:</p>
<div class="codecolorer-container lisp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="lisp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setq</span> f <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>a<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span>- <span style="color: #66cc66;">&#40;</span>* a <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><br />
<br />
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">mapcar</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">function</span> f<span style="color: #66cc66;">&#41;</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">mapcar</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">function</span> f<span style="color: #66cc66;">&#41;</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">5</span> <span style="color: #cc66cc;">6</span> <span style="color: #cc66cc;">7</span> <span style="color: #cc66cc;">8</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></div></td></tr></tbody></table></div>
]]></content:encoded>
	</item>
	<item>
		<title>От: Кулик Алексей aka kpblc</title>
		<link>https://autolisp.ru/2009/09/16/lambda-functions/comment-page-1/#comment-356</link>
		<dc:creator><![CDATA[Кулик Алексей aka kpblc]]></dc:creator>
		<pubDate>Thu, 17 Sep 2009 11:53:37 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=66#comment-356</guid>
		<description><![CDATA[Проблемой было понять, что lambda - обычная, нормальная функция. Только анонимная. А пример сделан настолько примитивным сознательно: ну не хотелось мне ненужного усложнения, например, для vl-sort или vl-remove-if. Хотя сделать, конечно, не проблема. Если считаешь, что надо - можно и этот разбор добавить.]]></description>
		<content:encoded><![CDATA[<p>Проблемой было понять, что lambda - обычная, нормальная функция. Только анонимная. А пример сделан настолько примитивным сознательно: ну не хотелось мне ненужного усложнения, например, для vl-sort или vl-remove-if. Хотя сделать, конечно, не проблема. Если считаешь, что надо - можно и этот разбор добавить.</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Sleekka</title>
		<link>https://autolisp.ru/2009/09/16/lambda-functions/comment-page-1/#comment-355</link>
		<dc:creator><![CDATA[Sleekka]]></dc:creator>
		<pubDate>Thu, 17 Sep 2009 10:21:23 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=66#comment-355</guid>
		<description><![CDATA[При всем уважении, но смысл не раскрыт, показан только пример применения, то же самое можно было сделать в обычном цикле, смысл применения лямбда функций в том, что функция только однажды дифинируется в оперативной памяти что приводит к более высокой скорости работы программы, в сравнении с обычным циклом, потому как в цикле функция дифинируется каждый раз снова.
http://ru.wikipedia.org/wiki/%D0%9B%D1%8F%D0%BC%D0%B1%D0%B4%D0%B0-%D0%B8%D1%81%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5]]></description>
		<content:encoded><![CDATA[<p>При всем уважении, но смысл не раскрыт, показан только пример применения, то же самое можно было сделать в обычном цикле, смысл применения лямбда функций в том, что функция только однажды дифинируется в оперативной памяти что приводит к более высокой скорости работы программы, в сравнении с обычным циклом, потому как в цикле функция дифинируется каждый раз снова.<br />
<a href="http://ru.wikipedia.org/wiki/%D0%9B%D1%8F%D0%BC%D0%B1%D0%B4%D0%B0-%D0%B8%D1%81%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5" rel="nofollow">http://ru.wikipedia.org/wiki/%D0%9B%D1%8F%D0%BC%D0%B1%D0%B4%D0%B0-%D0%B8%D1%81%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5</a></p>
]]></content:encoded>
	</item>
</channel>
</rss>
