<?xml version="1.0" encoding="utf-8"?>
<!-- If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/ -->
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:lj="http://www.livejournal.com">
  <id>urn:lj:livejournal.com:atom1:ru_lisp</id>
  <title>Жить не можем без проблем!</title>
  <subtitle>... или Lot of Idoitic Silly Parentheses</subtitle>
  <author>
    <name>Жить не можем без проблем!</name>
  </author>
  <link rel="alternate" type="text/html" href="http://ru-lisp.livejournal.com/"/>
  <link rel="self" type="text/xml" href="http://ru-lisp.livejournal.com/data/atom"/>
  <updated>2012-04-07T13:02:17Z</updated>
  <lj:journal userid="10509253" username="ru_lisp" type="community"/>
  <link rel="service.feed" type="application/x.atom+xml" href="http://ru-lisp.livejournal.com/data/atom" title="Жить не можем без проблем!"/>
  <link rel="hub" href="http://pubsubhubbub.appspot.com/"/>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_lisp:39008</id>
    <author>
      <name>l10n_be</name>
    </author>
    <lj:poster user="l10n_be" userid="25203259"/>
    <link rel="alternate" type="text/html" href="http://ru-lisp.livejournal.com/39008.html"/>
    <link rel="self" type="text/xml" href="http://ru-lisp.livejournal.com/data/atom/?itemid=39008"/>
    <title>парочка вопросов</title>
    <published>2012-04-07T13:02:17Z</published>
    <updated>2012-04-07T13:02:17Z</updated>
    <content type="html">В процессе изучения Лиспа натыкаюсь на некоторые моменты, с которыми пока не могу разобраться.&lt;br /&gt;&lt;br /&gt;1) sbcl &amp; nunion&lt;br /&gt;&lt;br /&gt;Введём такой простой код в repl clisp, gcl и sbcl&lt;br /&gt;(setf a '(1 2 3))&lt;br /&gt;(setf b '(4 5 6))&lt;br /&gt;(nunion a b)&lt;br /&gt;; clisp, gcl =&amp;gt; '(1 2 3 4 5 6)&lt;br /&gt;; sbcl =&amp;gt; '(3 2 1 4 5 6)&lt;br /&gt;&lt;br /&gt;А теперь узнаем значение a: в clisp и gcl получим '(1 2 3 4 5 6), а в sbcl -- '(1 4 5 6).&lt;br /&gt;&lt;br /&gt;Вопрос: кто неправ? У clisp и gcl результат логичный и ожидаемый, у sbcl -- не пойми что. Если поведение sbcl правильное, то каков смысл в существовании nunion?&lt;br /&gt;&lt;br /&gt;HyperSpec ситуацию не прояснил.&lt;br /&gt;&lt;br /&gt;2) gcl&lt;br /&gt;&lt;br /&gt;Возьмём такую простую программку для проверки:&lt;br /&gt;&lt;br /&gt;(defun test (a)&lt;br /&gt;  (print a))&lt;br /&gt;&lt;br /&gt;(test 6)&lt;br /&gt;&lt;br /&gt;$ gcl -f test.lisp &lt;br /&gt;&lt;br /&gt;Error: The variable A is unbound.&lt;br /&gt;Fast links are on: do (si::use-fast-links nil) for debugging&lt;br /&gt;Error signalled by SYSTEM::SET-UP-TOP-LEVEL.&lt;br /&gt;Backtrace: PRINT&lt;br /&gt;&lt;br /&gt;Если в начало добавить (si::use-fast-links nil), то запускается. Чего он хочет?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_lisp:38866</id>
    <author>
      <name>Anton Salikhmetov</name>
    </author>
    <lj:poster user="codedot" userid="11832244"/>
    <link rel="alternate" type="text/html" href="http://ru-lisp.livejournal.com/38866.html"/>
    <link rel="self" type="text/xml" href="http://ru-lisp.livejournal.com/data/atom/?itemid=38866"/>
    <title>Безусловный интерпретатор LISP на LISP</title>
    <published>2012-02-27T08:43:57Z</published>
    <updated>2012-03-08T05:09:34Z</updated>
    <content type="html">Здравствуйте!&lt;br /&gt;&lt;br /&gt;У меня возникла задача, которую можно сформулировать целиком в терминах языка LISP.&lt;br /&gt;&lt;br /&gt;Требуется найти такие функции &lt;code&gt;encode&lt;/code&gt;, &lt;code&gt;decode&lt;/code&gt; и &lt;code&gt;reduce&lt;/code&gt;, что&lt;br /&gt;&lt;br /&gt;&lt;code&gt;(decode (reduce … (reduce (encode (quote expr))) … ))&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;для некоторого конечного количества применений &lt;code&gt;reduce&lt;/code&gt; является результатом интерпретации выражения &lt;code&gt;expr&lt;/code&gt;, в котором можно ограничиться переменными и &lt;code&gt;lambda&lt;/code&gt; одного аргумента, причем возвращаемое значение &lt;code&gt;encode&lt;/code&gt; — это рекурсивное S-выражение &lt;code&gt;memory&lt;/code&gt; с циклами без атомов, а функция &lt;code&gt;reduce&lt;/code&gt; должна иметь следующий вид:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;(lambda (memory)
	(set (c[ad]*r memory) (c[ad]*r memory))
	(set (c[ad]*r memory) (c[ad]*r memory))

	…

	(set (c[ad]*r memory) (c[ad]*r memory))

	memory
)&lt;/pre&gt;&lt;br /&gt;Был бы признателен за помощь в решении данной задачи.&lt;br /&gt;&lt;br /&gt;Заранее спасибо.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_lisp:38501</id>
    <author>
      <name>incogn1too</name>
    </author>
    <lj:poster user="incogn1too" userid="12914163"/>
    <link rel="alternate" type="text/html" href="http://ru-lisp.livejournal.com/38501.html"/>
    <link rel="self" type="text/xml" href="http://ru-lisp.livejournal.com/data/atom/?itemid=38501"/>
    <title>group</title>
    <published>2012-02-17T07:22:30Z</published>
    <updated>2012-02-20T05:24:51Z</updated>
    <content type="html">Доброго времени суток. Нужна была функция, которая группирует список группами по несколько элементов. Получился не совсем красивый велосипед. Никто из сообщества не поделиться более элегантным решением?&lt;br /&gt;&lt;br /&gt;(define (group lst n)&lt;br /&gt;&amp;nbsp;&amp;nbsp;(define (group2 n2 lst2 group grouped)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(cond ((&amp;lt;= (length lst2) n2) (append grouped (list lst2)))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; ((= n2 0) (group2 n lst2 &amp;#39;() (append grouped (list (reverse group)))))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; (else (group2 (- n2 1) (mcdr lst2) (cons (car lst2) group) grouped))))&lt;br /&gt;&amp;nbsp;&amp;nbsp;(group2 n lst &amp;#39;() &amp;#39;() ))&lt;br /&gt;&lt;br /&gt;[UPD] Спасибо всем за ответы. В комментариях подали идею сделать более функциональную реализацию. Получилось что-то такое:&lt;br /&gt;&lt;br /&gt;(define (split n lst)&lt;br /&gt;&amp;nbsp;&amp;nbsp;(map (lambda(x)(take n x))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(append (list lst) (reverse (cdr&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(unfold (lambda(x)(drop n x)) lst empty?) )))))&lt;br /&gt;&lt;br /&gt;(define (unfold func init pred)&lt;br /&gt;&amp;nbsp;&amp;nbsp;(define (unfold2 func init pred res)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(let ((x (func init)))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(if (pred init)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;res&lt;br /&gt;&amp;nbsp;&amp;nbsp;(unfold2 func x pred (cons x res) ))))&lt;br /&gt;&amp;nbsp;&amp;nbsp;(unfold2 func init pred &amp;#39;()))&lt;br /&gt;&lt;br /&gt;&amp;nbsp;(define (drop n lst)&lt;br /&gt;&amp;nbsp;&amp;nbsp;(if (or (= n 0) (empty? lst))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lst&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(drop (- n 1) (cdr lst))))&lt;br /&gt;&lt;br /&gt;(define (take n lst)&lt;br /&gt;&amp;nbsp;&amp;nbsp;(define (take2 lst n res)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(if (or (empty? lst) (= n 0)) (reverse res)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(take2 (cdr lst) (- n 1) (cons (car lst) res))))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;(take2 lst n &amp;#39;()))</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_lisp:38170</id>
    <author>
      <name>incogn1too</name>
    </author>
    <lj:poster user="incogn1too" userid="12914163"/>
    <link rel="alternate" type="text/html" href="http://ru-lisp.livejournal.com/38170.html"/>
    <link rel="self" type="text/xml" href="http://ru-lisp.livejournal.com/data/atom/?itemid=38170"/>
    <title>скобки в Scheme</title>
    <published>2012-02-13T09:39:36Z</published>
    <updated>2012-02-13T09:39:36Z</updated>
    <content type="html">Возможно достаточно глупый вопрос, но я не совсем понимаю в какую сторону копать.&lt;br /&gt;&lt;br /&gt;(define def1&lt;br /&gt; (let ( (i 0) )&lt;br /&gt; (lambda () (set! i (+ i 1)) i))) &lt;br /&gt;&lt;br /&gt;(define (def2)&lt;br /&gt; (let ( (i 0) )&lt;br /&gt; (lambda () (set! i (+ i 1)) i))) &lt;br /&gt;&lt;br /&gt;Почему одна из функций увеличивает внутреннюю переменную, а другая все время возвращает один и тот же результат. Я понимаю, что дело в скобках, но не совсем ясно как это работает.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_lisp:37862</id>
    <author>
      <name>renoir1</name>
    </author>
    <lj:poster user="renoir1" userid="28397843"/>
    <link rel="alternate" type="text/html" href="http://ru-lisp.livejournal.com/37862.html"/>
    <link rel="self" type="text/xml" href="http://ru-lisp.livejournal.com/data/atom/?itemid=37862"/>
    <title>вопрос новичка</title>
    <published>2011-03-02T12:00:07Z</published>
    <updated>2011-03-02T12:00:07Z</updated>
    <content type="html">В чём принципиальное отличие операторов set, setq и setf?&lt;br /&gt;Как я понял, set связывает имя и значение, setq связывает атом и значение, setf связывает ячейку памяти и значение. Не могли бы вы объяснить мне на каком-нибудь ярком примере разницу в работе и применении на практике этих операторов?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_lisp:37371</id>
    <author>
      <name>Сергей Дымченко</name>
    </author>
    <lj:poster user="kit1980ukr" userid="17181057"/>
    <link rel="alternate" type="text/html" href="http://ru-lisp.livejournal.com/37371.html"/>
    <link rel="self" type="text/xml" href="http://ru-lisp.livejournal.com/data/atom/?itemid=37371"/>
    <title>Точность вычислений - числа с плавающей точкой. Экспонента считается неверно?</title>
    <published>2011-01-22T23:29:29Z</published>
    <updated>2011-01-23T00:33:23Z</updated>
    <content type="html">Нашел баг в библиотеке alexandria: субфакториалы (&lt;a href='http://en.wikipedia.org/wiki/Subfactorial' rel='nofollow'&gt;http://en.wikipedia.org/wiki/Subfactorial&lt;/a&gt;) читаются неверно, начиная с 11.&lt;br /&gt;&lt;br /&gt;Формула там верная - (floor (/ (+ 1 (factorial n)) (exp 1)))&lt;br /&gt;&lt;br /&gt;Но, например, для 11 получается (/ 39916801 2.7182817) =&amp;gt; 1.4684571e7, после округления получаем 14684571 вместо 14684570.&lt;br /&gt;&lt;br /&gt;Ладно, точность (exp 1) маленькая, пишем явно &lt;br /&gt;(/ 39916801 2.7182818284590452353602874713526624977572470936999595749669), но все равно получаем 1.4684571e7&lt;br /&gt;&lt;br /&gt;Python, например, считает точнее:&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; 39916801 / 2.7182818284590452353602874713526624977572470936999595749669&lt;br /&gt;14684570.445231671&lt;br /&gt;&lt;br /&gt;Как это побороть (считать с большей точностью)?&lt;br /&gt;&lt;br /&gt;Компилятор - SBCL&lt;br /&gt;&lt;br /&gt;P.S. Обнаружил, что экспонента считается неверно.&lt;br /&gt;CL-USER&amp;gt; (exp 1)&lt;br /&gt;2.7182817&lt;br /&gt;&lt;br /&gt;А более точное значение - 2.7182818284590452353602874713526624977572470936999595749669..., т.е.должно округляться до 2.7182818&lt;br /&gt;&lt;br /&gt;P.P.S&lt;br /&gt;Уже подсказали, что надо писать (exp 1d0), тогда проблемы с точностью решаются.&lt;br /&gt;В общем-то, это и будет фиксом для alexandria:subfactorial, но только для чисел до 18 включительно. Другая формула нужна.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_lisp:37092</id>
    <author>
      <name>Артём Алексеев</name>
    </author>
    <lj:poster user="aralex" userid="12016019"/>
    <link rel="alternate" type="text/html" href="http://ru-lisp.livejournal.com/37092.html"/>
    <link rel="self" type="text/xml" href="http://ru-lisp.livejournal.com/data/atom/?itemid=37092"/>
    <title>Почему LISP?</title>
    <published>2011-01-13T18:23:38Z</published>
    <updated>2011-01-13T18:23:38Z</updated>
    <content type="html">&lt;p&gt;Как говорил Ворошилов, вопрос к Знатокам (к знатокам LISP-а в данном случае)! Почему таки LISP? Или, если конкретнее, вопроса три:&lt;/p&gt;
 &lt;ol&gt;
 &lt;li&gt;Для каких именно задач LISP подходит больше, чем другие языки?&lt;/li&gt;
 &lt;li&gt;За счёт чего для них он подходит больше?&lt;/li&gt;
 &lt;li&gt;В чём именно выражается его преимущество?&lt;/li&gt;
&lt;/ol&gt;
 &lt;p&gt;Если не в лом, приведите, pls, коротенькие иллюстрации на LISP-е (или ссылочку на них). Заранее благодарен!&lt;/p&gt;
 &lt;p&gt;Исходно данный пост был размещён в сообществе &lt;span class='ljuser ljuser-name_ru_programming' lj:user='ru_programming' style='white-space:nowrap'&gt;&lt;a href='http://ru-programming.livejournal.com/profile'&gt;&lt;img src='http://l-stat.livejournal.com/img/community.gif?v=92.2' alt='[info]' width='16' height='16' style='vertical-align: bottom; border: 0; padding-right: 1px;'/&gt;&lt;/a&gt;&lt;a href='http://ru-programming.livejournal.com/'&gt;&lt;b&gt;ru_programming&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;, но там Знатоков, способных ответить внятно и по сути, увы, не нашлось &lt;b&gt;:(&lt;/b&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_lisp:36778</id>
    <author>
      <name>Сергей Дымченко</name>
    </author>
    <lj:poster user="kit1980ukr" userid="17181057"/>
    <link rel="alternate" type="text/html" href="http://ru-lisp.livejournal.com/36778.html"/>
    <link rel="self" type="text/xml" href="http://ru-lisp.livejournal.com/data/atom/?itemid=36778"/>
    <title>Code Review Request: Studious Student</title>
    <published>2011-01-11T14:46:12Z</published>
    <updated>2011-01-11T14:47:32Z</updated>
    <content type="html">Решил вернуться к изучению Common Lisp, в рамках чего порешал задачки на квалификации Facebook Hacker Cup.&lt;br /&gt;&lt;br /&gt;Под катом мое решение задачи "Studious Student".&lt;br /&gt;Прошу посмотреть код и подсказать, что можно сделать лучше (быстрее, проще).&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;br /&gt;Краткое условие задачи (оригинальное условие сейчас уже не посмотришь, к сожалению):&lt;br /&gt;&lt;br /&gt;Во входном файле в первой строке - количество тестов N.&lt;br /&gt;В каждой последующей строке - первое число - количество слов M, далее M разделенных пробелами слов.&lt;br /&gt;Для каждого теста вывести лексикографически минимальную комбинацию всех слов для данного теста.&lt;br /&gt;1 &amp;lt;= N &amp;lt;= 100&lt;br /&gt;1 &amp;lt;= M &amp;lt;= 9&lt;br /&gt;В каждом слове максимум 10 символов.&lt;br /&gt;Лимит времени - 6 минут на весь входной файл (плюс еще надо успеть скопировать и отправить результаты).&lt;br /&gt;&lt;br /&gt;Тесты-примеры:&lt;br /&gt;&lt;br /&gt;example.in:&lt;br /&gt;&lt;br /&gt;5&lt;br /&gt;6 facebook hacker cup for studious students&lt;br /&gt;5 k duz q rc lvraw&lt;br /&gt;5 mybea zdr yubx xe dyroiy&lt;br /&gt;5 jibw ji jp bw jibw&lt;br /&gt;5 uiuy hopji li j dcyi&lt;br /&gt;&lt;br /&gt;example.out:&lt;br /&gt;&lt;br /&gt;cupfacebookforhackerstudentsstudious&lt;br /&gt;duzklvrawqrc&lt;br /&gt;dyroiymybeaxeyubxzdr&lt;br /&gt;bwjibwjibwjijp&lt;br /&gt;dcyihopjijliuiuy&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Алгоритм я использовал очень простой (с небольшой вариацией) - генерация всех перестановок слов, конкатенация слов для этой перестановки и выбор из всех минимальной строки (вариант просто отсортировать исходный список не пройдет, например, для "za z").&lt;br /&gt;&lt;br /&gt;&lt;pre style="color: rgb(20, 19, 18); background-color: rgb(255, 255, 255);"&gt;

&lt;i&gt;&lt;span style="color: rgb(136, 135, 134);"&gt;;;;; Facebook Hacker Cup - 2011&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: rgb(136, 135, 134);"&gt;;;;; Qualification Round&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: rgb(136, 135, 134);"&gt;;;;; Studious Student&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: rgb(136, 135, 134);"&gt;;;;;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: rgb(136, 135, 134);"&gt;;;;; Sergey Dymchenko &amp;lt;kit1980@gmail.com&amp;gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: rgb(136, 135, 134);"&gt;;;;;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: rgb(136, 135, 134);"&gt;;;;; Language: Common Lisp&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: rgb(136, 135, 134);"&gt;;;;; Tested with SBCL 1.0.29 - http://www.sbcl.org/&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: rgb(136, 135, 134);"&gt;;;;; sbcl --noinform --load lisp-file &amp;lt; in-file &amp;gt; out-file&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: rgb(136, 135, 134);"&gt;;;;;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: rgb(136, 135, 134);"&gt;;;;; Libraries used:&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: rgb(136, 135, 134);"&gt;;;;; Alexandria - http://common-lisp.net/project/alexandria/&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="color: rgb(136, 135, 134);"&gt;;;;; split-sequence - http://www.cliki.net/SPLIT-SEQUENCE&lt;/span&gt;&lt;/i&gt;

&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;eval-when&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;:compile-toplevel :load-toplevel :execute&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;)&lt;/span&gt;&lt;/b&gt;
  &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;require&lt;/b&gt; 'alexandria&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;)&lt;/span&gt;&lt;/b&gt;
  &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;require&lt;/b&gt; 'split-sequence&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;))&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="color: rgb(210, 40, 17);"&gt;defun&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(100, 74, 155);"&gt; minimal-string &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;s-list&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;)&lt;/span&gt;&lt;/b&gt;
  &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;let&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;((&lt;/span&gt;&lt;/b&gt;minimal-string &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;apply&lt;/b&gt; #'concatenate 'simple-base-string s-list&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;))&lt;/span&gt;&lt;/b&gt; 
        current-string&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;)&lt;/span&gt;&lt;/b&gt;
    &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;alexandria:map-permutations 
     #'&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;lambda&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;ss&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;)&lt;/span&gt;&lt;/b&gt; 
         &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;if&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;string&amp;lt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;first&lt;/b&gt; ss&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;)&lt;/span&gt;&lt;/b&gt; minimal-string&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;)&lt;/span&gt;&lt;/b&gt;
             &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;progn&lt;/b&gt; 
               &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;setf&lt;/b&gt; current-string &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;apply&lt;/b&gt; #'concatenate 'simple-base-string ss&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;))&lt;/span&gt;&lt;/b&gt;
               &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;if&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;string&amp;lt;&lt;/b&gt; current-string minimal-string&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;)&lt;/span&gt;&lt;/b&gt;
                   &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;setf&lt;/b&gt; minimal-string current-string&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;)))))&lt;/span&gt;&lt;/b&gt; 
     s-list :copy &lt;b&gt;nil&lt;/b&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;)&lt;/span&gt;&lt;/b&gt;
    minimal-string&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;))&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="color: rgb(210, 40, 17);"&gt;defun&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(100, 74, 155);"&gt; case-string-to-list &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;s&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;)&lt;/span&gt;&lt;/b&gt;
  &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;split-sequence:split-sequence 
   &lt;span style="color: rgb(255, 128, 224);"&gt;#\S&lt;/span&gt;pace s
   &lt;b&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;:start&lt;/span&gt;&lt;/b&gt; &lt;span style="color: rgb(176, 128, 0);"&gt;1&lt;/span&gt; :remove-empty-subseqs &lt;b&gt;t&lt;/b&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;))&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="color: rgb(210, 40, 17);"&gt;defun&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(100, 74, 155);"&gt; solve &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;()&lt;/span&gt;&lt;/b&gt;
  &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;let&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;((&lt;/span&gt;&lt;/b&gt;n &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;read&lt;/b&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;)))&lt;/span&gt;&lt;/b&gt;
    &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;dotimes&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;i n&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;)&lt;/span&gt;&lt;/b&gt; 
      &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;format&lt;/b&gt; &lt;b&gt;t&lt;/b&gt; &lt;span style="color: rgb(191, 3, 3);"&gt;&amp;quot;~a~%&amp;quot;&lt;/span&gt; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;minimal-string &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;case-string-to-list &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;read-line&lt;/b&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;))))))&lt;/span&gt;&lt;/b&gt;
  &lt;span style="color: rgb(176, 128, 0);"&gt;0&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;)&lt;/span&gt;&lt;/b&gt;

&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;solve&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;)&lt;/span&gt;&lt;/b&gt;
&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;(&lt;/span&gt;&lt;/b&gt;quit&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;)&lt;/span&gt;&lt;/b&gt;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Программа работает, но не очень быстро: на максимальном входном файле (100 тестов по 9 слов по 10 символов в каждом) на моем компьютере считает чуть больше 4 минут. Попытки добавления (declare (optimize (speed 3) (safety 0)) и указания типов ни к чему хорошему не привели...</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_lisp:36398</id>
    <author>
      <name>jamhed</name>
    </author>
    <lj:poster user="jamhed" userid="6599718"/>
    <link rel="alternate" type="text/html" href="http://ru-lisp.livejournal.com/36398.html"/>
    <link rel="self" type="text/xml" href="http://ru-lisp.livejournal.com/data/atom/?itemid=36398"/>
    <title>Сводный псто.</title>
    <published>2010-12-07T06:34:02Z</published>
    <updated>2010-12-07T06:39:47Z</updated>
    <content type="html">В помощь выбирающему языг:&lt;br /&gt;&lt;br /&gt;задан список файлов в командной строке, надо вывести последовательно &lt;br /&gt;1-ю строку из 1-го файла&lt;br /&gt;1-ю строку из 2-го файла&lt;br /&gt;1-ю строку из 3-го файла&lt;br /&gt;...&lt;br /&gt;1-ю строку из N-го файла&lt;br /&gt;2-ю строку из 1-го файла&lt;br /&gt;2-ю строку из 2-го файла&lt;br /&gt;2-ю строку из 3-го файла&lt;br /&gt;...&lt;br /&gt;2-ю строку из N-го файла&lt;br /&gt;&lt;br /&gt;ну и так далее, причем количество строк в файлах разное&lt;br /&gt;&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jdevelop.livejournal.com/1705777.html"&gt;Haskell&lt;/a&gt;:&lt;br /&gt;&lt;pre&gt;
import System
import Data.List
main = getArgs &amp;gt;&amp;gt;= mapM readFile &amp;gt;&amp;gt;= mapM_ putStrLn . concat . transpose . map (lines)
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jamhed.livejournal.com"&gt;Perl&lt;/a&gt;:&lt;br /&gt;&lt;pre&gt;
my @fs = map { open(my $fh, $_); $fh } @ARGV;
while( my @fh = grep { not eof($_) } @fs ) { print my $f = readline($_) foreach (@fh) };
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jdevelop.livejournal.com/1705777.html?view=6183985#t6183985"&gt;Ruby&lt;/a&gt;:&lt;br /&gt;&lt;pre&gt;
fs = ARGV.map { |fn| File.open(fn) }
while fs.map(&amp;:eof?).include? false
   fs.each { |f| puts f.gets unless f.eof? }
end
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jamhed.livejournal.com/103451.html?thread=584475#t584475"&gt;LISP&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;
(let ((files (mapcar #'open *args*)))                                                
  (loop                                               
    (unless (mapcan (lambda (f &amp;aux (x (read-line f nil)))
                         (when x
                            (format t "~A~%" x) (list x)))
                    files)
	   (return))))
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jamhed.livejournal.com/103451.html?thread=586523#t586523"&gt;C++&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
using namespace std;

int __cdecl main(int argc, char *argv[]) {
	vector&lt;ifstream&gt; files(argc-1);
	for (int i=1; i&amp;lt;argc; ++i)
		files[i-1].open(argv[i]);
	for (bool hasLine=true; hasLine;) {
		hasLine = false;
		for (size_t i=0; i&amp;lt;files.size(); ++i) {
			string line;
			if (getline(files[i], line)) {
				hasLine = true;
				cout &amp;lt;&amp;lt; line &amp;lt;&amp;lt; endl;
			}
		}
	}
	return 0;
}
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://community.livejournal.com/ru_perl/379723.html?thread=4258379#t4258379"&gt;Erlang&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;
компиляция erlc a.erl
запуск: erl -noshell -s a start -- file file1 file2 file3 

-module(a).
-export([start/0]).

start() -&amp;gt;
  output([ FD || {ok, FD} &amp;lt;- [ file:open(X, read) || X &amp;lt;- init:get_plain_arguments() ]]),
  erlang:halt().

output([]) -&amp;gt; ok;
output(List) -&amp;gt;
output(lists:filter(
fun(FD) -&amp;gt;
case io:get_line(FD, "") of
Line when is_list(Line) -&amp;gt;
io:format(Line), true;
_ -&amp;gt; false
end
end,
List
)
).
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jamhed.livejournal.com/103451.html?thread=588827#t588827"&gt;C#&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;
static void Main(string[] args) {
	for (var files = args.Select(a =&amp;gt; new StreamReader(a)).ToList(); 0 &amp;lt; files.Select(f =&amp;gt; f.ReadLine()).Where(line =&amp;gt; line != null).Count(line =&amp;gt; { Console.WriteLine(line); 				return true; }); );
}
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jdevelop.livejournal.com/1705777.html?thread=6191921#t6191921"&gt;Java&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;
package example.io;

import static net.sourceforge.jfunctions.functions.FunctionToolkit.*;
import static net.sourceforge.jfunctions.io.IOToolkit.file;
import static net.sourceforge.jfunctions.structures.StructureToolkit.list;
import net.sourceforge.jfunctions.io.FileLineParser;

public class SortLinesExample {
	
	public static void main(String[] args) {
		for (String line : merge(transform(transform(list(args), file()), FileLineParser.ignoringErrors()))) {
			System.out.println(line);
		}
	}
	
}
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jdevelop.livejournal.com/1705777.html?thread=6193713#t6193713"&gt;Python&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;
import sys  
from itertools import izip_longest as izip, chain, ifilter

def main(args):
    for str in ifilter(lambda x: x is not None,
                       chain.from_iterable( izip( *[open(a) for a in args)] ) ):
        print str.rstrip()

if __name__=='__main__':
    main(sys.argv[1:])   
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jdevelop.livejournal.com/1705777.html?thread=6202673#t6202673"&gt;OCaml&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;
open ExtLib
open List
let (&amp;gt;&amp;gt;) f g x = g (f x)
let (|&amp;gt;) x f = f x;;

let fs = Array.to_list Sys.argv |&amp;gt; tl |&amp;gt; map (open_in &amp;gt;&amp;gt; Std.input_lines) in
while fold_left (fun go e -&amp;gt; Option.may print_endline (Enum.get e); go || not (Enum.is_empty e)) false fs do () done
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='cutid1-end'&gt;&lt;/a&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_lisp:36145</id>
    <author>
      <name>Dominus litis</name>
    </author>
    <lj:poster user="ztarlitz" userid="1956427"/>
    <link rel="alternate" type="text/html" href="http://ru-lisp.livejournal.com/36145.html"/>
    <link rel="self" type="text/xml" href="http://ru-lisp.livejournal.com/data/atom/?itemid=36145"/>
    <title>SICP по-русски.</title>
    <published>2010-09-17T03:10:00Z</published>
    <updated>2010-09-17T03:37:09Z</updated>
    <content type="html">Сделал перевод третьей лекции SICP, пусть здесь повисит, может кому-нибудь будет интересно.&lt;br /&gt;&lt;br /&gt;&lt;lj-embed id="3" /&gt;&lt;br /&gt;&lt;br /&gt;Предыдущие две лекции искать где-то здесь:&lt;br /&gt;http://ztarlitz.livejournal.com/32317.html</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_lisp:35896</id>
    <author>
      <email>anton@sw4me.com</email>
      <name>Anton Kovalenko</name>
    </author>
    <lj:poster user="akovalenko" userid="1989499"/>
    <link rel="alternate" type="text/html" href="http://ru-lisp.livejournal.com/35896.html"/>
    <link rel="self" type="text/xml" href="http://ru-lisp.livejournal.com/data/atom/?itemid=35896"/>
    <title>INPUT-STREAM-P, STREAM-ELEMENT-TYPE... vs. CLOSE</title>
    <published>2010-09-16T06:13:21Z</published>
    <updated>2010-09-16T06:13:21Z</updated>
    <content type="html">Обнаружил, что SBCL после закрытия stream'а теряет все возможности интроспекции на нём: INPUT-STREAM-P, OUTPUT-STREAM-P =&amp;gt; NIL, остальное ругается на попытку ввода-вывода с закрытым stream'ом (например, STREAM-ELEMENT-TYPE). Это категорически не кажется правильной вещью. Но прежде, чем бросаться репортить и фиксить, хочу посоветоваться с сообществом: правильно ли я понимаю, что вышеописанное не только «нехорошо», но и non-conforming? Я считаю, что это подтверждается тем, что про OPEN-STREAM-P написано Affected by: Close, а про всю интроспекцию -- Affected by: None.&lt;br /&gt;&lt;br /&gt;Clozure CL, CLISP, ECL не делают такой бяки.  У кого есть под рукой другие реализации -- как с этим делом принято?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_lisp:35674</id>
    <author>
      <email>anton@sw4me.com</email>
      <name>Anton Kovalenko</name>
    </author>
    <lj:poster user="akovalenko" userid="1989499"/>
    <link rel="alternate" type="text/html" href="http://ru-lisp.livejournal.com/35674.html"/>
    <link rel="self" type="text/xml" href="http://ru-lisp.livejournal.com/data/atom/?itemid=35674"/>
    <title>Extended loop: for .. while .. for</title>
    <published>2010-09-01T01:32:03Z</published>
    <updated>2010-09-01T01:32:03Z</updated>
    <content type="html">Никак не могу понять одной вещи про extended loop -- прямо мозги вытекают :(&lt;br /&gt;&lt;br /&gt;Допускается ли стандартом использование termination test clauses (e.g. while) *между* for? Так, чтобы если условие завершения наступило, stepping от «нижних» for бы не выполнялся (у меня довольно часто многоэтажный loop построен так, что «нижние» for не способны сделать stepping без ошибки, если вовремя не вывалиться).&lt;br /&gt;&lt;br /&gt;Если начать исследовать CLHS с того места, где расписан как-бы-BNF extended loop, кажется, что такого делать просто нельзя. Если закопаться внутрь, однако, попадаются (или, возможно, приглючиваются) намёки, что так делать можно. SBCL и CCL такое проглатывают и работают ожидаемым образом, но мне вспоминается печальный опыт с чем-то вроде ECL, который (если я правильно помню) потребовал подвинуть while вниз, а это уже потащило за собой переписывание всего подряд. В общем, совершенно нехарактерная для Common Lisp засада -- когда можно пользоваться нестандартным расширением несколько лет, и внезапно об этом узнать. Такая перспектива мне не нравится. (Взбрык ECL, опять же, совершенно не показатель -- дело было давно, он был моложе и глупее и вполне мог быть non-conforming в этом плане. Проверять заново не тянет: сейчас хочется выяснить, как оно *должно* быть, а тут такие проверки не помогут)&lt;br /&gt;&lt;br /&gt;Ну и такой вопрос -- если я сделаю вместо WHILE какой-нибудь FOR () = (WHEN кирдык (LOOP-FINISH)) -- оно-то уж точно предотвратит stepping в последующих FOR? (тогда, с одной стороны, становится непонятно, на фига не разрешили там WHILE (если и вправду нельзя), но зато понятно, на что его менять, чтобы обойтись без революций).</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_lisp:35509</id>
    <author>
      <name>three_sisters_3</name>
    </author>
    <lj:poster user="three_sisters_3" userid="13310405"/>
    <link rel="alternate" type="text/html" href="http://ru-lisp.livejournal.com/35509.html"/>
    <link rel="self" type="text/xml" href="http://ru-lisp.livejournal.com/data/atom/?itemid=35509"/>
    <title>ru_lisp @ 2010-07-27T12:06:00</title>
    <published>2010-07-27T09:17:28Z</published>
    <updated>2010-07-27T09:17:28Z</updated>
    <content type="html">Привет!&lt;br /&gt;В общем вот какое дело:&lt;br /&gt;emacs + slime + clisp + windows &lt;br /&gt;пишет каракули при выводе кириллицы&lt;br /&gt;я это лечу, &lt;br /&gt;(set-process-coding-system (get-process "inferior-lisp") 'cp1251 'cp1251)&lt;br /&gt;ну или хоткеем (просто первый вариант длиннее, ну вы понимаете)&lt;br /&gt;&lt;br /&gt;А как это куда-нибудь вписать чтобы не приходилось этого делать вообще. &lt;br /&gt;Потому, что если я явно указываю все параметры кодировок в .emacs, то он перестает автоматически распознавать и потом каракули из буфера обмена лезут и вообще.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_lisp:35317</id>
    <author>
      <name>Иридий</name>
    </author>
    <lj:poster user="polish_my_pole" userid="10324750"/>
    <link rel="alternate" type="text/html" href="http://ru-lisp.livejournal.com/35317.html"/>
    <link rel="self" type="text/xml" href="http://ru-lisp.livejournal.com/data/atom/?itemid=35317"/>
    <title>проблема с parenscript</title>
    <published>2010-02-22T10:09:22Z</published>
    <updated>2010-02-22T10:09:22Z</updated>
    <content type="html">здравствуйте, уважаемые.&lt;br /&gt;собираюсь я начать работу с parenscript, запускаю clisp, выполняю следующее:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;(dolist (x '(:hunchentoot :cl-who :parenscript :cl-fad))&lt;br /&gt;  (asdf:oos 'asdf:load-op x))&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;пакеты грузятся нормально. особое внимание обращаю на parenscript:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;; loading system definition from /usr/share/common-lisp/systems/parenscript.asd into #&amp;lt;PACKAGE ASDF0&amp;gt;&lt;br /&gt;;; Loading file /usr/share/common-lisp/systems/parenscript.asd ...&lt;br /&gt;; registering #&amp;lt;SYSTEM :PARENSCRIPT #x20CD1A6E&amp;gt; as PARENSCRIPT&lt;br /&gt;WARNING: Модифицируется родовая функция #&amp;lt;STANDARD-GENERIC-FUNCTION PERFORM&amp;gt;, которая уже была вызвана.&lt;br /&gt;; registering #&amp;lt;SYSTEM :PARENSCRIPT.TEST #x20CD921E&amp;gt; as PARENSCRIPT.TEST&lt;br /&gt;;; Loaded file /usr/share/common-lisp/systems/parenscript.asd&lt;br /&gt;;; Loading file /var/cache/common-lisp-controller/1000/clisp/parenscript/src/package.fas ...&lt;br /&gt;;; Loaded file /var/cache/common-lisp-controller/1000/clisp/parenscript/src/package.fas&lt;br /&gt;;; Loading file /var/cache/common-lisp-controller/1000/clisp/parenscript/src/utils.fas ...&lt;br /&gt;;; Loaded file /var/cache/common-lisp-controller/1000/clisp/parenscript/src/utils.fas&lt;br /&gt;;; Loading file /var/cache/common-lisp-controller/1000/clisp/parenscript/src/defgenerics.fas ...&lt;br /&gt;;; Loaded file /var/cache/common-lisp-controller/1000/clisp/parenscript/src/defgenerics.fas&lt;br /&gt;;; Loading file /var/cache/common-lisp-controller/1000/clisp/parenscript/src/js.fas ...&lt;br /&gt;;; Loaded file /var/cache/common-lisp-controller/1000/clisp/parenscript/src/js.fas&lt;br /&gt;;; Loading file /var/cache/common-lisp-controller/1000/clisp/parenscript/src/js-html.fas ...&lt;br /&gt;;; Loaded file /var/cache/common-lisp-controller/1000/clisp/parenscript/src/js-html.fas&lt;br /&gt;;; Loading file /var/cache/common-lisp-controller/1000/clisp/parenscript/src/css.fas ...&lt;br /&gt;;; Loaded file /var/cache/common-lisp-controller/1000/clisp/parenscript/src/css.fas&lt;br /&gt;;; Loading file /var/cache/common-lisp-controller/1000/clisp/parenscript/src/compile-js.fas ...&lt;br /&gt;;; Loaded file /var/cache/common-lisp-controller/1000/clisp/parenscript/src/compile-js.fas&lt;br /&gt;0 ошибок, 0 предупреждений&lt;br /&gt;0 ошибок, 0 предупреждений&lt;br /&gt;NIL&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;затем ввожу следующее:&lt;br /&gt;&lt;code&gt;(defpackage "PS-TUTORIAL"&lt;br /&gt;  (:use "COMMON-LISP" "HUNCHENTOOT" "CL-WHO" "PARENSCRIPT" "CL-FAD"))&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;и получаю сообщение об ошибке:&lt;br /&gt;&lt;code&gt;*** - SYSTEM::%FIND-PACKAGE: Нет пакетов с именем "PARENSCRIPT".&lt;br /&gt;Имеются следующие варианты продолжения:&lt;br /&gt;USE-VALUE      :R1      Вы можете ввести новое значение для использования.&lt;br /&gt;ABORT          :R2      Abort main loop&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;в sbcl -- то же самое.&lt;br /&gt;как быть?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_lisp:34333</id>
    <author>
      <name>kmmbvnr</name>
    </author>
    <lj:poster user="kmmbvnr" userid="8549220"/>
    <link rel="alternate" type="text/html" href="http://ru-lisp.livejournal.com/34333.html"/>
    <link rel="self" type="text/xml" href="http://ru-lisp.livejournal.com/data/atom/?itemid=34333"/>
    <title>Как объявить функцию результат которой может использовать setf ?</title>
    <published>2010-01-09T04:07:49Z</published>
    <updated>2010-01-09T04:07:49Z</updated>
    <content type="html">Хочется чтоб по аналогии&lt;br /&gt;&lt;pre&gt;
   (setf (car *x*) 5)
&lt;/pre&gt;&lt;br /&gt;объявить функцию, которую можно было бы использовать вот так:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
   (setf (&lt;b&gt;mycar&lt;/b&gt; *x*) 5)
&lt;/pre&gt;&lt;br /&gt;Это возможно?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_lisp:34143</id>
    <author>
      <name>Ander Skirnir</name>
    </author>
    <lj:poster user="ander_skirnir" userid="18548821"/>
    <link rel="alternate" type="text/html" href="http://ru-lisp.livejournal.com/34143.html"/>
    <link rel="self" type="text/xml" href="http://ru-lisp.livejournal.com/data/atom/?itemid=34143"/>
    <title>Синтаксические сладости</title>
    <published>2009-12-31T13:27:17Z</published>
    <updated>2009-12-31T13:27:52Z</updated>
    <content type="html">Кросс-пост: &lt;a href='http://lisper.ru/forum/thread/134' rel='nofollow'&gt;http://lisper.ru/forum/thread/134&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Предлагаю просто поделиться удобными и красивыми синтаксическими трюками, может даже целыми подходами.&lt;br /&gt;&lt;br /&gt;Вот, например, if с bind'ингом и it'ом:&lt;br /&gt;&lt;pre&gt;(defun iif-lform-gather (lst)
  (cond
    ((null lst) nil)
    ((listp (car lst))
       (if (and (keywordp (caar lst)) (eq (caar lst) :bind))
           (prog1 (cons (cons (cadar lst) (cddar lst))
                        (iif-lform-gather (cdr lst)))
                  (setf (car lst) (caddar lst)))                  
           (nconc (iif-lform-gather (car lst))
                  (iif-lform-gather (cdr lst)))))
    (t (iif-lform-gather (cdr lst)))))
         
         
(defmacro iif (arg tform nform)
  `(let ((it ,arg) ,@(iif-lform-gather arg))
     (if it ,tform ,nform)))&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Примеры использования:&lt;br /&gt;(iif (&amp;lt; (:bind xx (+ 12 x)) 34) (1+ xx) (-1 xx))&lt;br /&gt;(iif some-variable (cons 'a it) '(a))</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_lisp:33974</id>
    <author>
      <name>Dmitry Ignatiev</name>
    </author>
    <lj:poster user="love5an" userid="10400567"/>
    <link rel="alternate" type="text/html" href="http://ru-lisp.livejournal.com/33974.html"/>
    <link rel="self" type="text/xml" href="http://ru-lisp.livejournal.com/data/atom/?itemid=33974"/>
    <title>ru_lisp @ 2009-12-17T20:47:00</title>
    <published>2009-12-17T16:47:45Z</published>
    <updated>2009-12-17T16:47:45Z</updated>
    <content type="html">А оговаривается ли где-то в стандарте порядок раскрытия макросов?&lt;br /&gt;Репост отсюда вот:&lt;br /&gt;&lt;a href='http://lisper.ru/forum/thread/126' rel='nofollow'&gt;http://lisper.ru/forum/thread/126&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Дело в том, что ради интереса попробовал реализовать вот такую штуку&lt;br /&gt;&lt;div bgcolor="#ffffff" text="#000000"&gt;&lt;font face="monospace"&gt;&lt;pre&gt;
&lt;font color="#6a5acd"&gt;(&lt;/font&gt;&lt;font color="#804040"&gt;&lt;b&gt;eval-when&lt;/b&gt;&lt;/font&gt; &lt;font color="#6a5acd"&gt;(&lt;/font&gt;&lt;font color="#008080"&gt;:compile-toplevel&lt;/font&gt; &lt;font color="#008080"&gt;:load-toplevel&lt;/font&gt; &lt;font color="#008080"&gt;:execute&lt;/font&gt;&lt;font color="#6a5acd"&gt;)&lt;/font&gt; 
  &lt;font color="#6a5acd"&gt;(&lt;/font&gt;&lt;font color="#804040"&gt;&lt;b&gt;defvar&lt;/b&gt;&lt;/font&gt; &lt;font color="#2e8b57"&gt;&lt;b&gt;*cleaners*&lt;/b&gt;&lt;/font&gt; &lt;font color="#6a5acd"&gt;'&lt;/font&gt;&lt;font color="#6a5acd"&gt;()&lt;/font&gt;&lt;font color="#6a5acd"&gt;))&lt;/font&gt; 
 
&lt;font color="#6a5acd"&gt;(&lt;/font&gt;&lt;font color="#804040"&gt;&lt;b&gt;defmacro&lt;/b&gt;&lt;/font&gt; with-cleaners &lt;font color="#6a5acd"&gt;((&lt;/font&gt;&lt;font color="#008080"&gt;&amp;amp;rest&lt;/font&gt; resources&lt;font color="#6a5acd"&gt;)&lt;/font&gt; &lt;font color="#008080"&gt;&amp;amp;body&lt;/font&gt; body&lt;font color="#6a5acd"&gt;)&lt;/font&gt; 
  &lt;font color="#ff00ff"&gt;&amp;quot;Each resource is of form (name value)&amp;quot;&lt;/font&gt; 
  &lt;font color="#6a5acd"&gt;(&lt;/font&gt;&lt;font color="#804040"&gt;&lt;b&gt;setf&lt;/b&gt;&lt;/font&gt; &lt;font color="#2e8b57"&gt;&lt;b&gt;*cleaners*&lt;/b&gt;&lt;/font&gt; &lt;font color="#6a5acd"&gt;'&lt;/font&gt;&lt;font color="#6a5acd"&gt;()&lt;/font&gt;&lt;font color="#6a5acd"&gt;)&lt;/font&gt; 
  &lt;font color="#a020f0"&gt;`(&lt;/font&gt;&lt;font color="#804040"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt; ,resources 
     &lt;font color="#6a5acd"&gt;(&lt;/font&gt;&lt;font color="#804040"&gt;&lt;b&gt;macrolet&lt;/b&gt;&lt;/font&gt; &lt;font color="#6a5acd"&gt;((&lt;/font&gt;add-cleaner &lt;font color="#6a5acd"&gt;(&lt;/font&gt;&lt;font color="#008080"&gt;&amp;amp;body&lt;/font&gt; cleaner-body&lt;font color="#6a5acd"&gt;)&lt;/font&gt; 
                  &lt;font color="#6a5acd"&gt;(&lt;/font&gt;&lt;font color="#804040"&gt;&lt;b&gt;push&lt;/b&gt;&lt;/font&gt; cleaner-body &lt;font color="#2e8b57"&gt;&lt;b&gt;*cleaners*&lt;/b&gt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;)&lt;/font&gt; 
                  &lt;font color="#804040"&gt;&lt;b&gt;nil&lt;/b&gt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;)&lt;/font&gt; 
                &lt;font color="#6a5acd"&gt;(&lt;/font&gt;invoke-cleaners &lt;font color="#6a5acd"&gt;()&lt;/font&gt; 
                  &lt;font color="#a020f0"&gt;`(&lt;/font&gt;&lt;font color="#804040"&gt;&lt;b&gt;progn&lt;/b&gt;&lt;/font&gt; ,@&lt;font color="#6a5acd"&gt;(&lt;/font&gt;&lt;font color="#804040"&gt;&lt;b&gt;reduce&lt;/b&gt;&lt;/font&gt; &lt;font color="#2e8b57"&gt;&lt;b&gt;#'nconc&lt;/b&gt;&lt;/font&gt; &lt;font color="#2e8b57"&gt;&lt;b&gt;*cleaners*&lt;/b&gt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;)&lt;/font&gt; 
                          ,&lt;font color="#6a5acd"&gt;(&lt;/font&gt;&lt;font color="#804040"&gt;&lt;b&gt;setf&lt;/b&gt;&lt;/font&gt; &lt;font color="#2e8b57"&gt;&lt;b&gt;*cleaners*&lt;/b&gt;&lt;/font&gt; &lt;font color="#6a5acd"&gt;'&lt;/font&gt;&lt;font color="#6a5acd"&gt;()&lt;/font&gt;&lt;font color="#6a5acd"&gt;)&lt;/font&gt;&lt;font color="#a020f0"&gt;)&lt;/font&gt;&lt;font color="#6a5acd"&gt;))&lt;/font&gt; 
       &lt;font color="#6a5acd"&gt;(&lt;/font&gt;&lt;font color="#804040"&gt;&lt;b&gt;unwind-protect&lt;/b&gt;&lt;/font&gt; 
         &lt;font color="#6a5acd"&gt;(&lt;/font&gt;&lt;font color="#804040"&gt;&lt;b&gt;progn&lt;/b&gt;&lt;/font&gt; ,@body&lt;font color="#6a5acd"&gt;)&lt;/font&gt; 
         &lt;font color="#6a5acd"&gt;(&lt;/font&gt;invoke-cleaners&lt;font color="#6a5acd"&gt;)))&lt;/font&gt;&lt;font color="#a020f0"&gt;)&lt;/font&gt;&lt;font color="#6a5acd"&gt;)&lt;/font&gt; 
&lt;/pre&gt;&lt;/font&gt;&lt;/div&gt;&lt;br /&gt;и обнаружил, что оно не везде работает так, как хотелось(должно вычислять все cleaner формы в конце области видимости)(оно полагается на порядок раскрытия слева-направо; соответственно, например, Clozure CL оно работает, а в SBCL, например - нет(и это только в случае с unwind-protect, как я понял. Если вместо него обычная функция, порядок - слева направо))</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_lisp:33600</id>
    <author>
      <email>livejournal@webmaster.ms</email>
      <name>zhengxi</name>
    </author>
    <lj:poster user="zhengxi" userid="7066619"/>
    <link rel="alternate" type="text/html" href="http://ru-lisp.livejournal.com/33600.html"/>
    <link rel="self" type="text/xml" href="http://ru-lisp.livejournal.com/data/atom/?itemid=33600"/>
    <title>Как интернить не только строки ?</title>
    <published>2009-11-22T13:20:43Z</published>
    <updated>2009-11-22T20:20:36Z</updated>
    <content type="html">Хочется иметь функцию, которая бы работала как &lt;b&gt;string-&amp;gt;symbol&lt;/b&gt;, но для всех типов данных.&lt;br /&gt;То есть, если &lt;b&gt;x&lt;/b&gt; и &lt;b&gt;y&lt;/b&gt; equal?-равны (по значению), то &lt;b&gt;(intern x)&lt;/b&gt; и &lt;b&gt;(intern y)&lt;/b&gt; будут eq?-равны (по ссылке).&lt;br /&gt;&lt;br /&gt;Зачем это надо?&lt;br /&gt;Для того же, что и &lt;b&gt;string-&amp;gt;symbol&lt;/b&gt;: экономить память, если ожидается много одинаковых иммутабельных оьъектов и быстро их сравнивать (eq? вместо equal?)&lt;br /&gt;&lt;br /&gt;Написал я такую функцию (PLT Scheme)&lt;br /&gt;&lt;pre&gt;
(&lt;span style="color:#800000;font-weight:bold"&gt;define&lt;/span&gt; &lt;b&gt;*internat*&lt;/b&gt; (&lt;span style="color:#800000;font-weight:bold"&gt;make-weak-hash&lt;/span&gt;))

&lt;span style="color:#808080"&gt;; not thread safe&lt;/span&gt;
(&lt;span style="color:#800000;font-weight:bold"&gt;define&lt;/span&gt; (intern x [internat &lt;b&gt;*internat*&lt;/b&gt;])
  (&lt;span style="color:#800000;font-weight:bold"&gt;let&lt;/span&gt; ([e (&lt;span style="color:#800000;font-weight:bold"&gt;hash-ref&lt;/span&gt; internat x &lt;span style="color:#800000;font-weight:bold"&gt;#f&lt;/span&gt;)])
    (&lt;span style="color:#800000;font-weight:bold"&gt;if&lt;/span&gt; e
        (&lt;span style="color:#800000;font-weight:bold"&gt;ephemeron-value&lt;/span&gt; e)
        (&lt;span style="color:#800000;font-weight:bold"&gt;let&lt;/span&gt; ([e (&lt;span style="color:#800000;font-weight:bold"&gt;make-ephemeron&lt;/span&gt; x x)])
          (&lt;span style="color:#800000;font-weight:bold"&gt;hash-set!&lt;/span&gt; internat x e)
          (&lt;span style="color:#800000;font-weight:bold"&gt;ephemeron-value&lt;/span&gt; e)))))

(&lt;span style="color:#800000;font-weight:bold"&gt;define&lt;/span&gt; (interned? x [internat &lt;b&gt;*internat*&lt;/b&gt;])
  (&lt;span style="color:#800000;font-weight:bold"&gt;let&lt;/span&gt; ([e (&lt;span style="color:#800000;font-weight:bold"&gt;hash-ref&lt;/span&gt; internat x &lt;span style="color:#800000;font-weight:bold"&gt;#f&lt;/span&gt;)])
    (&lt;span style="color:#800000;font-weight:bold"&gt;if&lt;/span&gt; e
        (&lt;span style="color:#800000;font-weight:bold"&gt;eq?&lt;/span&gt; x (&lt;span style="color:#800000;font-weight:bold"&gt;ephemeron-value&lt;/span&gt; e))
        &lt;span style="color:#800000;font-weight:bold"&gt;#f&lt;/span&gt;)))

&lt;span style="color:#808080"&gt;; набор тестов тут: &lt;a href="http://paste.lisp.org/display/90896" rel="nofollow"&gt;http://paste.lisp.org/display/90896&lt;/a&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Хотя она делает что нужно, она мне очень не нравится.&lt;br /&gt;Даже в таком упрощённом (не thread safe) варианте она сильно медленнее, чем &lt;b&gt;string-&amp;gt;symbol&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Как это можно сделать лучше ?&lt;br /&gt;М.б. есть реализации Scheme (или CL), где &lt;b&gt;string-&amp;gt;symbol&lt;/b&gt; (или &lt;b&gt;intern&lt;/b&gt;) уже работает для всех типов ?&lt;br /&gt;&lt;br /&gt;&lt;table width="100%" border="0" align="center" cellpadding="1" cellspacing="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="background-color:#FFCCCC"&gt;&lt;b&gt;UPD&lt;/b&gt;: это задача не про подсчёт хеш-суммы, и дальнейшей работой с хеш-суммой вместо объекта.&lt;br /&gt;&lt;br /&gt;Это задача про &lt;u&gt;удаление дубликатов иммутабельных объектов&lt;/u&gt;:&lt;pre&gt;(&lt;span style="color:#800000;font-weight:bold"&gt;define&lt;/span&gt; a "AAA")
(intern a) ; возвращает a
(&lt;span style="color:#800000;font-weight:bold"&gt;define&lt;/span&gt; b "AAA")
(intern b) ; возвращает a&lt;/pre&gt;&lt;br /&gt;Должно быть true не только &lt;pre&gt;(&lt;span style="color:#800000;font-weight:bold"&gt;eq?&lt;/span&gt; (intern &amp;quot;AAA&amp;quot;) (intern &amp;quot;AAA&amp;quot;))&lt;/pre&gt; но и &lt;pre&gt;(&lt;span style="color:#800000;font-weight:bold"&gt;equal?&lt;/span&gt; (intern &amp;quot;AAA&amp;quot;) &amp;quot;AAA&amp;quot;)&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_lisp:33450</id>
    <author>
      <name>tinedel</name>
    </author>
    <lj:poster user="tinedel" userid="2774358"/>
    <link rel="alternate" type="text/html" href="http://ru-lisp.livejournal.com/33450.html"/>
    <link rel="self" type="text/xml" href="http://ru-lisp.livejournal.com/data/atom/?itemid=33450"/>
    <title>композиция</title>
    <published>2009-11-22T07:09:05Z</published>
    <updated>2009-11-22T20:22:18Z</updated>
    <content type="html">Доброе утро.&lt;br /&gt;А есть в эхотаге композиция функций? &lt;br /&gt;В варианте, например,&lt;br /&gt;&lt;br /&gt;(funcall (composition #'reverse #'car #'1+) '(1 2 3 4)) -&amp;gt; 5&lt;br /&gt;&lt;br /&gt;Нет, я её конечно сам написал для функций одного аргумента (мне больше не надо, а думать над тем как оно будет в общем виде было неохота), но вдруг она есть, а я её не нашел.&lt;br /&gt;&lt;br /&gt;АПД: судя по ответам - в стандарт не входит. Реализована как минимум в виде функций metatilities:compose и alexandria:compose. &lt;br /&gt;&lt;br /&gt;спасибо</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_lisp:33213</id>
    <author>
      <name>kmmbvnr</name>
    </author>
    <lj:poster user="kmmbvnr" userid="8549220"/>
    <link rel="alternate" type="text/html" href="http://ru-lisp.livejournal.com/33213.html"/>
    <link rel="self" type="text/xml" href="http://ru-lisp.livejournal.com/data/atom/?itemid=33213"/>
    <title>Пятничное</title>
    <published>2009-11-20T08:47:03Z</published>
    <updated>2009-11-20T08:47:03Z</updated>
    <content type="html">А можно ли сделать пакет по свойствам похожий на пакет keyword?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Так, чтобы получилось, что наш пакет содержит любой символ и значением любого символа из этого пакета было бы, скажем, строковое представление этого символа?&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
&amp;gt; (symbol-value (ourpackage:any_symbol))
"any_symbol"
&lt;/pre&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_lisp:32960</id>
    <author>
      <name>kmmbvnr</name>
    </author>
    <lj:poster user="kmmbvnr" userid="8549220"/>
    <link rel="alternate" type="text/html" href="http://ru-lisp.livejournal.com/32960.html"/>
    <link rel="self" type="text/xml" href="http://ru-lisp.livejournal.com/data/atom/?itemid=32960"/>
    <title>Когда форма не будет выполненна?</title>
    <published>2009-11-14T12:07:50Z</published>
    <updated>2009-11-14T12:07:50Z</updated>
    <content type="html">Подскажите, смотрю на код, и не понимаю, зачем pushnew понадобилось оборачивать в eval-when?&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
(eval-when (compile eval load)
  (pushnew :solaris *features*))
&lt;/pre&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_lisp:32630</id>
    <author>
      <email>ann24061987@ya.ru</email>
      <name>n2h</name>
    </author>
    <lj:poster user="n2h" userid="21520162"/>
    <link rel="alternate" type="text/html" href="http://ru-lisp.livejournal.com/32630.html"/>
    <link rel="self" type="text/xml" href="http://ru-lisp.livejournal.com/data/atom/?itemid=32630"/>
    <title>AutoLISP</title>
    <published>2009-11-13T04:01:48Z</published>
    <updated>2009-11-13T04:01:48Z</updated>
    <content type="html">Hi all!&lt;br /&gt;Пришлось столкнуться с программированием на AutoLISP&amp;nbsp;(AutoCAD). IDE,&amp;nbsp;поставляемый с автокадом,&amp;nbsp;не обновлялся лет 20,&amp;nbsp;работать в нем просто невозможно&lt;br /&gt;&lt;br /&gt;Может подскажите какую-нибудь среду разработки,&amp;nbsp;в которой можно писать на AutoLISP&amp;nbsp;и в которой есть интеграция с AutoCAD&amp;nbsp;(т.е. дебаг и запуск приложений из IDE)</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_lisp:32435</id>
    <author>
      <name>Dmitry Ignatiev</name>
    </author>
    <lj:poster user="love5an" userid="10400567"/>
    <link rel="alternate" type="text/html" href="http://ru-lisp.livejournal.com/32435.html"/>
    <link rel="self" type="text/xml" href="http://ru-lisp.livejournal.com/data/atom/?itemid=32435"/>
    <title>ru_lisp @ 2009-10-09T21:59:00</title>
    <published>2009-10-09T18:02:16Z</published>
    <updated>2009-10-09T18:02:16Z</updated>
    <content type="html">Привет.&lt;br /&gt;Я тут дописываю библиотеку-биндинг к Direct3D 10&lt;br /&gt;&lt;a href='http://love5an.livejournal.com/316933.html'&gt;http://love5an.livejournal.com/316933.html&lt;/a&gt;&lt;br /&gt;Ну, то есть, уже написал, практически, но остался один небольшой(хотя, как посмотреть) момент. В D3D10 есть один интерфейс, COM-интерфейс, который подразумевает переопределяемость юзером. &lt;a href="http://msdn.microsoft.com/en-us/library/ee419311%28VS.85%29.aspx" rel="nofollow"&gt;ID3D10Include&lt;/a&gt;.&lt;br /&gt;То есть, грубо говоря, инстансы его наследников должены быть полноценными COM-объектами, определенными из лиспа. С табличкой виртуальных функций и т.д, ну то есть, чтоб их мог вызывать рантайм D3D10.&lt;br /&gt;&lt;br /&gt;Кто-нибудь может подсказать, в каком направлении тут копать, т.е. как это реализовать? Хватит ли просто массива с указателями на коллбэки или как-то это дело в COM регистрировать и т.д.? И если надо работать с COM, то можно ли все это из рантайма лиспа сделать, без использования таких вещей, как MIDL компилятор и т.д?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_lisp:31744</id>
    <author>
      <name>lispnik</name>
    </author>
    <lj:poster user="lispnik" userid="1629496"/>
    <link rel="alternate" type="text/html" href="http://ru-lisp.livejournal.com/31744.html"/>
    <link rel="self" type="text/xml" href="http://ru-lisp.livejournal.com/data/atom/?itemid=31744"/>
    <title>Сообщение от команды смотрителей</title>
    <published>2009-09-27T10:08:29Z</published>
    <updated>2009-09-27T13:40:08Z</updated>
    <content type="html">Уважаемые читатели и писатели ru_lisp!&lt;br /&gt;&lt;br /&gt;В связи с разразившейся в ЖЖ эпидемии порноспама введена премодерация для сообщений новых пользователей.  Некоторые пользователи, ники которых мне показались незнакомыми и странными, также пока оставлены на премодерации до тех пор, пока они не докажут с помощью вменяемых сообщений, что они не верблюды.&lt;br /&gt;&lt;br /&gt;Подчеркну, что если вы хотите только читать сообщество, премодерация вам нисколько не помешает.  Оставайтесь в статусе премодерации столько, сколько захотите :)  На комментарии, как я понял, этот статус тоже не влияет, только на посты.&lt;br /&gt;&lt;br /&gt;Надеемся, что премодерация не доставит вам никаких неудобств.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_lisp:31099</id>
    <author>
      <name>Ander Skirnir</name>
    </author>
    <lj:poster user="ander_skirnir" userid="18548821"/>
    <link rel="alternate" type="text/html" href="http://ru-lisp.livejournal.com/31099.html"/>
    <link rel="self" type="text/xml" href="http://ru-lisp.livejournal.com/data/atom/?itemid=31099"/>
    <title>loop: collect into</title>
    <published>2009-09-12T03:06:58Z</published>
    <updated>2009-09-12T03:06:58Z</updated>
    <content type="html">Прочитал, всё, что смог найти, но так и не понял по какому принципу нижеприведённая функция после (setf temp nil) на следующем collect i into temp как ни в чём не бывало вcпоминает значение temp, предшествовавшее присвоению ему nil'a и дописывает к нему новый элемент. Может, кто-нибудь знает в чём дело?&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;(defun divide-by-tokens (token-list target-list)
  (loop for i in target-list
        when (member i token-list)
          collect (copy-list temp) into result
          and do (setf temp nil)
        else collect i into temp
        finally (return (nconc result (list temp)))))&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Пример: &lt;br /&gt;(divide-by-tokens '(where) '(a b where c d))&lt;br /&gt;&amp;gt;&amp;gt; ((A B) (A B C D))</content>
  </entry>
</feed>

