<?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_scheme</id>
  <title>Scheme Community</title>
  <subtitle>Russian Scheme Language Community</subtitle>
  <author>
    <name>Russian Scheme Language Community</name>
  </author>
  <link rel="alternate" type="text/html" href="http://ru-scheme.livejournal.com/"/>
  <link rel="self" type="text/xml" href="http://ru-scheme.livejournal.com/data/atom"/>
  <updated>2011-09-10T06:38:20Z</updated>
  <lj:journal userid="9040818" username="ru_scheme" type="community"/>
  <link rel="service.feed" type="application/x.atom+xml" href="http://ru-scheme.livejournal.com/data/atom" title="Scheme Community"/>
  <link rel="hub" href="http://pubsubhubbub.appspot.com/"/>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_scheme:40054</id>
    <author>
      <name>Yuriy Al. Shirokov</name>
    </author>
    <lj:poster user="yushi" userid="598500"/>
    <link rel="alternate" type="text/html" href="http://ru-scheme.livejournal.com/40054.html"/>
    <link rel="self" type="text/xml" href="http://ru-scheme.livejournal.com/data/atom/?itemid=40054"/>
    <title>Встроенная Схема и указатель на объект</title>
    <published>2011-09-10T06:38:20Z</published>
    <updated>2011-09-10T06:38:20Z</updated>
    <content type="html">Здравствуйте!&lt;br /&gt;&lt;br /&gt;Есть проект на C++, к некоторым классам которого автоматически создаются привязки с помощью &lt;a href="http://www.swig.org/" rel="nofollow"&gt;SWIG&lt;/a&gt;. Есть желание прикрутить к нему скрипты на Scheme. Вопрос: есть ли какой-то способ вызвать из кода на C++ схемную функцию, передав ей в качестве аргумента указатель на объект? (Желательно обёрнутый в SWIG-овский тип, но если у какой-то из встраиваемых Схем, не обязательно из числа поддерживаемых SWIG, есть для этого собственные средства, в крайнем случае сгодятся и они.)&lt;br /&gt;&lt;br /&gt;Самостоятельно я способа это сделать в документации на SWIG и на три поддерживаемых им интерпретатора (CHICKEN, Guile, Racket) не нашёл. Пока остановился на таком решении: есть уникальный индентификатор объёкта (в моём случае оказалось удобно использовать обычную C-шную строку, &lt;code&gt;char*&lt;/code&gt;) и C-шная функция, получающая по этому идентификатору указатель на объект. В схемную функцию передаётся идентификатор, а в написанных на C++ функциях, экспортируемых в Схему, по этому идентификатору снова получается указатель на объект. Но мне самому это решение не нравится, и ручной работы получается многовато, и архитектура выходит, на мой вкус, уродливой.&lt;br /&gt;&lt;br /&gt;Кстати, все три Схемы, которые поддерживаются SWIG, показались мне не очень подходящими для прикручивания к плюсовому проекту. В Guile 1.8 тип SCM несовместим со стандартом C++ (в 2.0 это вроде поправили, но 2.0 поставишь сильно не во всякое окружение, уж больно новых библиотек он хочет). В CHICKEN очень расстроила тамошняя система пакетов, работающая в обход пакетного менеджера ОС, что гарантирует танцы с бубном при деплое (у меня не удалось заставить её нормально и стабильно работать). В Racket — количество телодвижений, необходимых, чтобы дёрнуть интерпретатор из своего C-шного кода.&lt;br /&gt;&lt;br /&gt;Кто использовал скрипты на Scheme в своих приложениях на C++? Каким интерпретатором для этого пользовались? Насколько реально прикрутить в этих целях, например, Gambit?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_scheme:39897</id>
    <author>
      <name>Dominus litis</name>
    </author>
    <lj:poster user="ztarlitz" userid="1956427"/>
    <link rel="alternate" type="text/html" href="http://ru-scheme.livejournal.com/39897.html"/>
    <link rel="self" type="text/xml" href="http://ru-scheme.livejournal.com/data/atom/?itemid=39897"/>
    <title>Перевод третьей лекции SICP</title>
    <published>2010-09-17T04:23:30Z</published>
    <updated>2010-09-17T06:13:13Z</updated>
    <content type="html">&amp;nbsp;&lt;lj-embed id="7" /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_scheme:39426</id>
    <author>
      <name>Dominus litis</name>
    </author>
    <lj:poster user="ztarlitz" userid="1956427"/>
    <link rel="alternate" type="text/html" href="http://ru-scheme.livejournal.com/39426.html"/>
    <link rel="self" type="text/xml" href="http://ru-scheme.livejournal.com/data/atom/?itemid=39426"/>
    <title>SICP по-русски.</title>
    <published>2010-09-09T17:25:05Z</published>
    <updated>2010-09-09T17:25:05Z</updated>
    <content type="html">Сделал перевод первых двух лекций SICP. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;lj-embed id="4" /&gt;&lt;br /&gt;Если кому-нибудь интересно вторую лекцию искать здесь &lt;a href="http://ztarlitz.livejournal.com/32317.html"&gt;ЦКУНК!&lt;/a&gt;&amp;nbsp;&lt;br /&gt;Если кто-то не в курсе SICP это вводный курс по программированию читался в MIT, в начале 80х. Не смотря на то что прошло уже четверть века, актуальности лекции не потеряли.&amp;nbsp;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_scheme:39355</id>
    <author>
      <name>Лев Плинер</name>
    </author>
    <lj:poster user="prepod_urgu" userid="20174609"/>
    <link rel="alternate" type="text/html" href="http://ru-scheme.livejournal.com/39355.html"/>
    <link rel="self" type="text/xml" href="http://ru-scheme.livejournal.com/data/atom/?itemid=39355"/>
    <title>ru_scheme @ 2010-07-23T10:47:00</title>
    <published>2010-07-23T05:19:35Z</published>
    <updated>2010-07-23T05:19:35Z</updated>
    <content type="html">Добрый день.&lt;br /&gt;&lt;br /&gt;Меня зовут Лев Плинер. Я преподаю программирование на математико-механическом факультете Уральского государственного университета (Екатеринбург).&lt;br /&gt;&lt;br /&gt;В одном из потоков специальности "Математика. Прикладная математика" наши студенты в качестве первого языка получают Scheme. Курс по Скиме рассчитан на 2 семестра и кроме собственно языка содержит простейшие алгоритмы, лямбда-исчисление, основы исчисления высказываний и основы исчисления предикатов. В третьем семестре мы рассказываем ассоциативное исчисление и Хаскелл, а в четвёртом учим регистровой машине. Материал третьего и четвёртого семестров находится сейчас только в планах, так как эксперимент с введением такого учебного плана начался всего год назад.&lt;br /&gt;&lt;br /&gt;Вполне возможно, что именно я буду готовить курс по регистровой машине. У меня была идея написать интерпретатор для скимы, продублировав все юниты на ассемблере и Си, и именно работой с этим исходным кодом заниматься вторую часть семестра. Собственно, потому и пишу сюда - интерпретатор в каком-то виде уже готов: &lt;a href='http://code.google.com/p/skbscheme/' rel='nofollow'&gt;http://code.google.com/p/skbscheme/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Буду крайне благодарен коллегам из сообщества за ревью кода, дефекты и идеи доработок. Исходник написан под Visual C 2008. Заранее спасибо.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_scheme:39005</id>
    <author>
      <email>crexfexpex@yandex.ru</email>
      <name>Voins</name>
    </author>
    <lj:poster user="voins" userid="5598013"/>
    <link rel="alternate" type="text/html" href="http://ru-scheme.livejournal.com/39005.html"/>
    <link rel="self" type="text/xml" href="http://ru-scheme.livejournal.com/data/atom/?itemid=39005"/>
    <title>ru_scheme @ 2010-07-12T13:57:00</title>
    <published>2010-07-12T09:56:52Z</published>
    <updated>2010-07-12T09:56:52Z</updated>
    <content type="html">Премодерацию включил. Добавил &lt;span class='ljuser ljuser-name_alexott' lj:user='alexott' style='white-space:nowrap'&gt;&lt;a href='http://alexott.livejournal.com/profile'&gt;&lt;img src='http://l-stat.livejournal.com/img/userinfo.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://alexott.livejournal.com/'&gt;&lt;b&gt;alexott&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; в число модераторов, так что теперь нас трое. Будет плохо - поправим по ходу.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_scheme:38634</id>
    <author>
      <email>crexfexpex@yandex.ru</email>
      <name>Voins</name>
    </author>
    <lj:poster user="voins" userid="5598013"/>
    <link rel="alternate" type="text/html" href="http://ru-scheme.livejournal.com/38634.html"/>
    <link rel="self" type="text/xml" href="http://ru-scheme.livejournal.com/data/atom/?itemid=38634"/>
    <title>ru_scheme @ 2010-07-08T11:09:00</title>
    <published>2010-07-08T07:08:57Z</published>
    <updated>2010-07-08T07:08:57Z</updated>
    <content type="html">Может премодерацию введём? А то, честно говоря, уже несколько поднадоело спам чистить. Возражения есть?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_scheme:36475</id>
    <author>
      <name>Вико - маленькая мертвая бусинка</name>
    </author>
    <lj:poster user="vannadis" userid="8131086"/>
    <link rel="alternate" type="text/html" href="http://ru-scheme.livejournal.com/36475.html"/>
    <link rel="self" type="text/xml" href="http://ru-scheme.livejournal.com/data/atom/?itemid=36475"/>
    <title>ru_scheme @ 2010-04-13T17:39:00</title>
    <published>2010-04-13T14:40:25Z</published>
    <updated>2010-04-13T14:40:25Z</updated>
    <content type="html">Kawa теперь можно использовать для разработки под Google Android.&lt;br /&gt;&lt;br /&gt;Статья на официальном сайте:&lt;br /&gt;&lt;a href='http://per.bothner.com/blog/2009/AndroidHelloScheme/' rel='nofollow'&gt;http://per.bothner.com/blog/2009/AndroidHelloScheme/&lt;/a&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_scheme:36282</id>
    <author>
      <email>lisp-hacker@ya.ru</email>
      <name>idiot</name>
    </author>
    <lj:poster user="city_idiot" userid="9937839"/>
    <link rel="alternate" type="text/html" href="http://ru-scheme.livejournal.com/36282.html"/>
    <link rel="self" type="text/xml" href="http://ru-scheme.livejournal.com/data/atom/?itemid=36282"/>
    <title>tail recursion [closed]</title>
    <published>2010-03-10T20:07:47Z</published>
    <updated>2011-01-14T13:51:01Z</updated>
    <content type="html">Даны две функции:

&lt;pre style="color:#000000;background:#ffffff;"&gt;&lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;define&lt;/span&gt; accumulate-if-&lt;span style="color:#008c00; "&gt;1&lt;/span&gt; &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;lambda&lt;/span&gt; &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;test?&lt;/span&gt; lst init&lt;span style="color:#808030; "&gt;)&lt;/span&gt;
                    &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;define&lt;/span&gt; iter &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;lambda&lt;/span&gt; &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;lst&lt;/span&gt; acc&lt;span style="color:#808030; "&gt;)&lt;/span&gt;
                                   &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;cond&lt;/span&gt; &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;empty?&lt;/span&gt; lst&lt;span style="color:#808030; "&gt;)&lt;/span&gt; acc&lt;span style="color:#808030; "&gt;)&lt;/span&gt;
                                         &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;test?&lt;/span&gt; &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;car&lt;/span&gt; lst&lt;span style="color:#808030; "&gt;)&lt;/span&gt;&lt;span style="color:#808030; "&gt;)&lt;/span&gt; &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;iter&lt;/span&gt; &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;cdr&lt;/span&gt; lst&lt;span style="color:#808030; "&gt;)&lt;/span&gt; &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;+&lt;/span&gt; acc &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;car&lt;/span&gt; lst&lt;span style="color:#808030; "&gt;)&lt;/span&gt;&lt;span style="color:#808030; "&gt;)&lt;/span&gt;&lt;span style="color:#808030; "&gt;)&lt;/span&gt;&lt;span style="color:#808030; "&gt;)&lt;/span&gt;
                                         &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;else&lt;/span&gt; &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;iter&lt;/span&gt; &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;cdr&lt;/span&gt; lst&lt;span style="color:#808030; "&gt;)&lt;/span&gt; acc&lt;span style="color:#808030; "&gt;)&lt;/span&gt;&lt;span style="color:#808030; "&gt;)&lt;/span&gt;&lt;span style="color:#808030; "&gt;)&lt;/span&gt;&lt;span style="color:#808030; "&gt;)&lt;/span&gt;&lt;span style="color:#808030; "&gt;)&lt;/span&gt;
                    &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;iter&lt;/span&gt; lst init&lt;span style="color:#808030; "&gt;)&lt;/span&gt;&lt;span style="color:#808030; "&gt;)&lt;/span&gt;&lt;span style="color:#808030; "&gt;)&lt;/span&gt;

&lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;define&lt;/span&gt; accumulate-if-&lt;span style="color:#008c00; "&gt;2&lt;/span&gt; &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;lambda&lt;/span&gt; &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;test?&lt;/span&gt; lst init&lt;span style="color:#808030; "&gt;)&lt;/span&gt;
                          &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;cond&lt;/span&gt; &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;empty?&lt;/span&gt; lst&lt;span style="color:#808030; "&gt;)&lt;/span&gt; init&lt;span style="color:#808030; "&gt;)&lt;/span&gt;
                                &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;test?&lt;/span&gt; &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;car&lt;/span&gt; lst&lt;span style="color:#808030; "&gt;)&lt;/span&gt;&lt;span style="color:#808030; "&gt;)&lt;/span&gt; &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;accumulate-if-2&lt;/span&gt; test&lt;span style="color:#808030; "&gt;?&lt;/span&gt; &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;cdr&lt;/span&gt; lst&lt;span style="color:#808030; "&gt;)&lt;/span&gt; &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;+&lt;/span&gt; init &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;car&lt;/span&gt; lst&lt;span style="color:#808030; "&gt;)&lt;/span&gt;&lt;span style="color:#808030; "&gt;)&lt;/span&gt;&lt;span style="color:#808030; "&gt;)&lt;/span&gt;&lt;span style="color:#808030; "&gt;)&lt;/span&gt;
                                &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;else&lt;/span&gt; &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;accumulate-if-2&lt;/span&gt; test&lt;span style="color:#808030; "&gt;?&lt;/span&gt; &lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;cdr&lt;/span&gt; lst&lt;span style="color:#808030; "&gt;)&lt;/span&gt; init&lt;span style="color:#808030; "&gt;)&lt;/span&gt;&lt;span style="color:#808030; "&gt;)&lt;/span&gt;&lt;span style="color:#808030; "&gt;)&lt;/span&gt;&lt;span style="color:#808030; "&gt;)&lt;/span&gt;&lt;span style="color:#808030; "&gt;)&lt;/span&gt;
&lt;/pre&gt;

Судя по затратам памяти и процессорного времени вторая функция не желает разворачивать в цикл. 
Объясните, пожалуйста, почему? Заранее благодарен.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_scheme:35863</id>
    <author>
      <name>"my essence has no label"</name>
    </author>
    <lj:poster user="aawee" userid="12120124"/>
    <link rel="alternate" type="text/html" href="http://ru-scheme.livejournal.com/35863.html"/>
    <link rel="self" type="text/xml" href="http://ru-scheme.livejournal.com/data/atom/?itemid=35863"/>
    <title>Связь PLT Scheme и C(++,#)</title>
    <published>2009-12-12T18:02:14Z</published>
    <updated>2009-12-12T18:02:14Z</updated>
    <content type="html">Приходилось ли вам реализовывать описанное здесь &lt;a href='http://docs.plt-scheme.org/inside/index.html' rel='nofollow'&gt;http://docs.plt-scheme.org/inside/index.html&lt;/a&gt; ? Имеется ввиду возможность вызова на Схеме функций из Си-библиотек.&lt;br /&gt;&lt;br /&gt;Одно из первых что надо сделать в п.1.2.1 &lt;a href='http://docs.plt-scheme.org/inside/overview.html' rel='nofollow'&gt;http://docs.plt-scheme.org/inside/overview.html&lt;/a&gt;&lt;br /&gt;- это "скомпилировать" C-файл при помощи mzc.exe - при этом он не компилирует его сам, а использует найденный компилятор. &lt;br /&gt;&lt;br /&gt;Вопрос - какой использовать компилятор, чтобы mzc его видел? (Windows) У меня только Ms Visual студия - mzc говорит "compile-extension: can't find an installed C compiler".&lt;br /&gt;&lt;br /&gt;И реально ли связать Схему именно с C#? потому что я видел упоминания только о C/C++.&lt;br /&gt;&lt;br /&gt;Благодарю за ответы :)</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_scheme:35746</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-scheme.livejournal.com/35746.html"/>
    <link rel="self" type="text/xml" href="http://ru-scheme.livejournal.com/data/atom/?itemid=35746"/>
    <title>specialize</title>
    <published>2009-12-03T12:51:53Z</published>
    <updated>2009-12-03T12:56:05Z</updated>
    <content type="html">Вопрос не про этот конкретный пример, это как-бы паттерн.&lt;br /&gt;На примере проще объяснить.&lt;br /&gt;&lt;pre&gt;; допустим есть функция
(define (vector-cmp-2? vec-length vec-ref ; интерфейс вектора
                       val=? val&amp;lt;?        ; интерфейс элемента вектора
                       a b)               ; сравниваемые вектора
                                          ; -1 если a &amp;lt; b
                                          ;  0 если a = b
                                          ;  1 если a &amp;gt; b
  (let ((a-len (vec-length a))
        (b-len (vec-length b)))
    (let loop ((i 0))
      (let ((a-end (= i a-len))
            (b-end (= i b-len)))
        (cond
          ((and a-end b-end) 0)
          (a-end -1)
          (b-end 1)
          (else 
           (let ((a-val (vec-ref a i))
                 (b-val (vec-ref b i)))
             (if (val=? a-val b-val)
                 (loop (+ 1 i))
                 (if (val&amp;lt;? a-val b-val) -1 1)))))))))

; частные случаи
(define (string-cmp? a b)
  (vector-cmp-2? string-length string-ref char=? char&amp;lt;? a b))

(define (string-cmp-ci? a b)
  (vector-cmp-2? string-length string-ref char-ci=? char-ci&amp;lt;? a b))

(define (bytes-cmp? a b)
  (vector-cmp-2? bytes-length bytes-ref = &amp;lt; a b))

; ну и так далее&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Всё бы хорошо, но медленно.&lt;br /&gt;Что делать?&lt;br /&gt;Можно несколько раз скопипейстить тушку функцию vector-cmp-2&lt;br /&gt;Можно превратить vector-cmp-2 в макрос.&lt;br /&gt;Будет быстрее раза в 4.&lt;br /&gt;&lt;br /&gt;Но оба варианта, на мой взгляд, не очень красивые.&lt;br /&gt;&lt;br /&gt;Хочется иметь макрос specialize, оставить vector-cmp-2 и писать так:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;(define (string-cmp? a b)
  (specialize vector-cmp-2? string-length string-ref char=? char&amp;lt;? a b))

(define (string-cmp-ci? a b)
  (specialize vector-cmp-2? string-length string-ref char-ci=? char-ci&amp;lt;? a b))

(define (bytes-cmp? a b)
  (specialize vector-cmp-2? bytes-length bytes-ref = &amp;lt; a b))&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Только не понятно как такой макрос написать :(</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_scheme:35258</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-scheme.livejournal.com/35258.html"/>
    <link rel="self" type="text/xml" href="http://ru-scheme.livejournal.com/data/atom/?itemid=35258"/>
    <title>ru_scheme @ 2009-11-30T12:40:00</title>
    <published>2009-11-30T12:40:50Z</published>
    <updated>2009-11-30T12:40:50Z</updated>
    <content type="html">Почему такой код не валидный:&lt;pre&gt;
(define (f)
  (define x 1)
  (printf "~a~n" x)
  (define y 2)  ; тут ошибка - нельзя define после вызова функции
  (void))&lt;/pre&gt;А такой валидный:&lt;pre&gt;
(define (f2)
  (define x 1)
  &lt;span style="color:red"&gt;(define _&lt;/span&gt; (printf "~a~n" x)&lt;span style="color:red"&gt;)&lt;/span&gt;
  (define y 2)
  (void))&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Какой смысл на запрет define после вызова функции ?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_scheme:34621</id>
    <author>
      <name>"my essence has no label"</name>
    </author>
    <lj:poster user="aawee" userid="12120124"/>
    <link rel="alternate" type="text/html" href="http://ru-scheme.livejournal.com/34621.html"/>
    <link rel="self" type="text/xml" href="http://ru-scheme.livejournal.com/data/atom/?itemid=34621"/>
    <title>PLT Схема..</title>
    <published>2009-11-24T15:13:09Z</published>
    <updated>2009-11-24T15:13:09Z</updated>
    <content type="html">Изучая PLT Scheme, не могу найти ответы на ряд вопросов. &lt;br /&gt;&lt;br /&gt;1) пользуюсь т.н. средой разработки Dr.Scheme. Здесь при выборе опции Choose Language (выбрать язык) появляется много вариантов - в чем суть этих "языков"? Какой из них ближе к собственно Scheme?&lt;br /&gt;&lt;br /&gt;2) как конкатенировать (объединять) строки?&lt;br /&gt;&lt;br /&gt;3) пытаюсь написать класс..&lt;br /&gt;(define point% (class object%&lt;br /&gt;  (init xin)&lt;br /&gt;  (init yin)&lt;br /&gt;  (define x xin)&lt;br /&gt;  (define y yin)&lt;br /&gt;  (super-new)&lt;br /&gt;))&lt;br /&gt;поля получаются автоматически private. как сделать public поля?&lt;br /&gt;имею догадку что такой возможности нет, из-за идеи "правильного программирования" у функциональных языков. Но нигде не нашел упоминания что это невозможно..</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_scheme:34444</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-scheme.livejournal.com/34444.html"/>
    <link rel="self" type="text/xml" href="http://ru-scheme.livejournal.com/data/atom/?itemid=34444"/>
    <title>Как называется стандартная функция, которая делает вот такое?</title>
    <published>2009-11-20T11:12:35Z</published>
    <updated>2009-11-20T11:14:05Z</updated>
    <content type="html">&lt;pre&gt;
; (indexed-zip '(1 0 0 2 1) ; список чисел от 0 до N-1
;              '(&amp;quot;A&amp;quot; &amp;quot;B&amp;quot; &amp;quot;C&amp;quot;) '(&amp;quot;a&amp;quot; &amp;quot;b&amp;quot; &amp;quot;c&amp;quot;) '(&amp;quot;!&amp;quot; &amp;quot;@&amp;quot; &amp;quot;#&amp;quot;)) ; N списков
;
; результат:        '(&amp;quot;a&amp;quot; &amp;quot;A&amp;quot; &amp;quot;B&amp;quot; &amp;quot;!&amp;quot; &amp;quot;b&amp;quot;)
;                      |   |   |   |   |
; значения взяты из   1го 0го 0го 2го 1го списков, согласно первому списку
&lt;/pre&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_scheme:34084</id>
    <author>
      <name>Евгеном кличут</name>
    </author>
    <lj:poster user="asphyx_lj" userid="7657374"/>
    <link rel="alternate" type="text/html" href="http://ru-scheme.livejournal.com/34084.html"/>
    <link rel="self" type="text/xml" href="http://ru-scheme.livejournal.com/data/atom/?itemid=34084"/>
    <title>Вопрос новичка: «выполнимые» и «невыполнимые» списки</title>
    <published>2009-10-13T22:56:43Z</published>
    <updated>2009-10-13T22:56:43Z</updated>
    <content type="html">Странный, возможно, вопрос: где определяется, выполняется ли список на месте, или нет? К примеру, можно ли рассмотреть конструкцию&lt;br /&gt;&lt;br /&gt;(define (blah x) (...))&lt;br /&gt;&lt;br /&gt;как вызов некой встроенной в интерпретатор функции "define"? Если да, то, получается, что обработчик этой "функции" сам определяет, eval ли ему его аргументы, или не eval. Тогда почему явное указание "не eval"&lt;br /&gt;&lt;br /&gt;(define '(blah x) '(...))&lt;br /&gt;&lt;br /&gt;не верно? Нам ведь нужно взять тело функции как есть, в виде списка, и связать его с именем "blah". В чём я заблуждаюсь?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_scheme:33920</id>
    <author>
      <name>sbos</name>
    </author>
    <lj:poster user="xsbos" userid="9745588"/>
    <link rel="alternate" type="text/html" href="http://ru-scheme.livejournal.com/33920.html"/>
    <link rel="self" type="text/xml" href="http://ru-scheme.livejournal.com/data/atom/?itemid=33920"/>
    <title>Вызов лямбда-функции из списка</title>
    <published>2009-10-05T16:39:08Z</published>
    <updated>2009-10-05T16:39:08Z</updated>
    <content type="html">Приветствую! Изучаю Scheme (среда DrScheme, язык mzscheme) и никак не могу разобраться, как вызвать лямбда-функцию из списка (например, первую)&lt;br /&gt;&lt;br /&gt;Т.е. пусть есть список&lt;br /&gt;&lt;pre&gt;
(define lst
  '(
    (lambda (x) (+ x 1))
    (lambda (x) (+ x 4))
    )
  )

((car lst) 3) ; ошибка!&lt;/pre&gt;&lt;br /&gt;Подскажите, пожалуйста, как это делается</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_scheme:30088</id>
    <author>
      <name>Специализни шаблонца!</name>
    </author>
    <lj:poster user="udpn" userid="14304056"/>
    <link rel="alternate" type="text/html" href="http://ru-scheme.livejournal.com/30088.html"/>
    <link rel="self" type="text/xml" href="http://ru-scheme.livejournal.com/data/atom/?itemid=30088"/>
    <title>MIT-GNU Scheme newbie problem</title>
    <published>2009-08-25T11:48:52Z</published>
    <updated>2009-08-25T11:48:52Z</updated>
    <content type="html">Доброе. Установил интерпретатор от MIT. Дабл-ЛКМ по иконке. Открывается Edwin. Что нужно в нем нажать, чтобы наконец начать интерпретацию?&amp;nbsp;Можно ли этим редактором открыть файл, созданный в другой программе, как это сделать и какая у файла должна быть кодировка? Видел кто-нибудь нормальный юзер мануал на английском или русском? Стоит ли перейти на другой, более вменяемый интерпретатор Scheme?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_scheme:29838</id>
    <author>
      <email>yoschi@mail.ru</email>
      <name>Юрий Гриф</name>
    </author>
    <lj:poster user="yoschi" userid="7000188"/>
    <link rel="alternate" type="text/html" href="http://ru-scheme.livejournal.com/29838.html"/>
    <link rel="self" type="text/xml" href="http://ru-scheme.livejournal.com/data/atom/?itemid=29838"/>
    <title>COM-объекты в PLT-Scheme</title>
    <published>2009-08-04T07:53:26Z</published>
    <updated>2009-08-04T07:53:26Z</updated>
    <content type="html">Приветствую!&lt;br /&gt;&lt;br /&gt;Два вопроса к тем, кто пользует MysterX в PLT-Scheme.&lt;br /&gt;&lt;br /&gt;1) Есть ли способ остановить процесс, запущенный при создании com-объекта приложения? Нечто навроде vlax-release-object из автокадного VL. А то ведь он остается висеть в памяти даже после полного выключения программы.&lt;br /&gt;&lt;br /&gt;2) Программы, в которых используется COM-технология довольно часто падают - хоть из DrScheme запускай, хоть откомпилированую. Причем, никаких общих признаков нет - то нормально работает, то вырубается безо всякой видимой причины со стандартным виндовским сообщением вида "PLT Scheme GUI application - обнаружена ошибка. Приложение будет закрыто". С чем это может быть связано?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_scheme:29577</id>
    <author>
      <name>smalgin</name>
    </author>
    <lj:poster user="smalgin" userid="7899297"/>
    <link rel="alternate" type="text/html" href="http://ru-scheme.livejournal.com/29577.html"/>
    <link rel="self" type="text/xml" href="http://ru-scheme.livejournal.com/data/atom/?itemid=29577"/>
    <title>PLTScheme - (current-milliseconds)</title>
    <published>2009-07-08T23:01:51Z</published>
    <updated>2009-07-08T23:01:51Z</updated>
    <content type="html">Простой вопрос, наверное.&lt;br /&gt;&lt;br /&gt;есть такая процедура в MIT Scheme , называется (runtime).&lt;br /&gt;&lt;br /&gt;Типичное использование (display (- (runtime) start-time))&lt;br /&gt;&lt;br /&gt;Я у себя держу PLT Scheme, там этой штуки нет. Зато есть (current-milliseconds)&lt;br /&gt;&lt;br /&gt;Фишка в том, что (display (- (current-milliseconds) start-time)) внутри моего кода всегда выдает 0. Иногда почему-то 16.&lt;br /&gt;&lt;br /&gt;В чем грабли, об которые я уже полдня натыкаюсь?&lt;br /&gt;&lt;br /&gt;под катом код (упражнение 1.20 из SICP)&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;&lt;br /&gt;&lt;pre&gt;


(define (timed-prime-test n start-time)
  (start-prime-test n start-time (current-milliseconds)))

(define (start-prime-test n start-time sttime2)
  (cond ((prime? n)
         (display &amp;quot; Total time: &amp;quot;)
         (display (- (current-milliseconds) start-time))
         (newline)
         (display n)
         (report-prime (- (current-milliseconds) sttime2))
      )))
      
(define (report-prime elapsed-time)
  (display &amp;quot; *** prime &amp;quot;)
  (display elapsed-time))


(define (search-for-primes m)
  (start-search-for-primes 1 m))

(define (start-search-for-primes s m)
  (cond ((&amp;gt;= s m) (newline)(display &amp;quot; ======= &amp;quot;))
        (else (timed-prime-test s (current-milliseconds)) (start-search-for-primes (+ s 1) m))))
         
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;/div&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_scheme:29223</id>
    <author>
      <name>Anton</name>
    </author>
    <lj:poster user="tentaclius" userid="20485746"/>
    <link rel="alternate" type="text/html" href="http://ru-scheme.livejournal.com/29223.html"/>
    <link rel="self" type="text/xml" href="http://ru-scheme.livejournal.com/data/atom/?itemid=29223"/>
    <title>Изменение пространства имен символа</title>
    <published>2009-07-08T17:58:10Z</published>
    <updated>2009-07-08T17:58:10Z</updated>
    <content type="html">Доброго времени суток.&lt;br /&gt;Долго шарил по разным учебникам в поисках ответа на такой вопрос. Увы пока безуспешно.&lt;br /&gt;Подскажите пожалуйста, кто сталкивался с подобным...&lt;br /&gt;&lt;br /&gt;Вот пример кода:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;
(define (some-function a-symbol)
  (define z 11)
  (eval a-symbol))

(some-function 'z)
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Естественно, в данном случае интерпретатор отрапортует об ошибке, поскольку с символом z, передаваемым в some-function не связанно значение. Вопрос в следующем: как мне сделать именно так как хочется :), тоесть, чтобы внутри функции передаваемый символ связать с новым пространством имен.&lt;br /&gt;&lt;br /&gt;В plt-scheme достаточно много различных функций по работе с пространствами имен. Можно их создавать, выбирать и т.д. Самым, кажется, связанным с данной темой является следующий пример:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;
  (let ((ns (make-base-namespace)))
    (parameterize ((current-namespace ns))
      (define z 11)
      (eval '(define z 14) ns)
      (display z)
      (newline)
      (display (eval 'z)))))
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;но тут я наталкиваюсь на другую проблему: получается что (define z 11) и (eval '(define z 14)) действуют в различных областях имен. Т.е., как я понимаю (parameterize ((current-namespace ns)) ...) действует только для оператора (eval ...) ?&lt;br /&gt;Но мне хотелось бы именно совместить определенный символ в текущем контексте (при помощи (define ...)) с передаваемым в качестве аргумента функции символом. Подскажите пожалуйста как можно (и можно ли) подобного достичь?&lt;br /&gt;&lt;br /&gt;Спасибо заранее.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_scheme:29176</id>
    <author>
      <name>arhirat</name>
    </author>
    <lj:poster user="arhirat" userid="18230260"/>
    <link rel="alternate" type="text/html" href="http://ru-scheme.livejournal.com/29176.html"/>
    <link rel="self" type="text/xml" href="http://ru-scheme.livejournal.com/data/atom/?itemid=29176"/>
    <title>Обратные функции</title>
    <published>2009-06-16T21:39:16Z</published>
    <updated>2009-06-16T21:52:00Z</updated>
    <content type="html">Я в свободное время люблю пофантазировать на тему языков программирования, различных парадигм в программировании и всяких фишек, которые могли быть полезны. Например сегодня я хотел бы немного порассуждать на тему функций и передачи данных в них.&lt;br /&gt;Ведь что такое функция? Это некоторый черный ящик, в который мы подаем данные, а на выходе получаем результат.&lt;br /&gt;&lt;a href="http://pics.livejournal.com/arhirat/pic/000191bg/"&gt;&lt;img src="http://pics.livejournal.com/arhirat/pic/000191bg" width="151" height="142" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;В качестве входных данных могут быть переменные, а так же результат выполнения других функций. В результате у нас получается дерево, при чем данные передаются всегда от вершины дерева к корню (слева на право).&lt;br /&gt;&lt;a href="http://pics.livejournal.com/arhirat/pic/0001a7wc/"&gt;&lt;img src="http://pics.livejournal.com/arhirat/pic/0001a7wc" width="267" height="210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;В данном примере мы вычисляем логическое значение, является ли Y суммой X и 5. &lt;br /&gt;А теперь вопрос на засыпку, а кто сказал, что данные должны обязательно передаваться от вершин к корню? Почему бы нам не поменять направление в некоторых ветвях, например так.&lt;br /&gt;&lt;a href="http://pics.livejournal.com/arhirat/pic/0001bqk8/"&gt;&lt;img src="http://pics.livejournal.com/arhirat/pic/0001bqk8" width="267" height="210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Присвоить Y значение, равное сумме X и 5. Или еще лучше вот так.&lt;br /&gt;&lt;a href="http://pics.livejournal.com/arhirat/pic/0001dhx1/"&gt;&lt;img src="http://pics.livejournal.com/arhirat/pic/0001dhx1" width="267" height="210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Присвоить X такое значение, чтобы его сумма с 5 равнялась Y.&lt;br /&gt;Во всех языках программирования операция присвоения нового значения переменной и операция логического сравнения - это две совершенно разные операции. Обычно обозначаются либо разными символами (в C++ это = и ==), либо разными функциями. Хотя по сути это одно и то же! Мы просто в одном случае спрашиваем, а равны ли X и Y, а в другом случае утверждаем что X равен Y. Т.е. логически это одна и та же операция, только направление движения данных отличается.&lt;br /&gt;Конечно, далеко не все функции обратимы как операция сложения, но все-таки это было бы очень удобно. Например операция andmap и map в каком-то смысле одинаковые, только опять же данные движутся в другом направлении. В одном случае мы спрашиваем, а будет ли истиной какое-то выражение для всех значений списка, а в другом случае мы утверждаем, что некоторое выражение является истиной для всех значений списка.&lt;br /&gt;А если взять и абстрагироваться от конкретных направлений, а просто взять и объявить некоторую формулу, например "X+5=Y". Вот имеется такая взаимосвязь переменных. А потом эту формулу использовать по своему усмотрению, в одном случае мы присваиваем Y значение суммы, в другом случае мы присваиваем X нужное значение, а в третьем мы просто хотим проверить истинно ли данное выражение.&lt;br /&gt;Короче, я от слов к делу. Я немного поэкспериментировал на эту тему и вот что получилось.&lt;br /&gt;&lt;br /&gt;#lang scheme&lt;br /&gt;(define (sv! f v) (keyword-apply f '(#:value) (list v) '()))&lt;br /&gt;(define (gv? f) (apply f '()))&lt;br /&gt;(define-syntax-rule (g? x) (lambda () x))&lt;br /&gt;(define-syntax-rule (s! x) (lambda (#:value value) (set! x value)))&lt;br /&gt;(define-syntax-rule (defun fun x y value getter setter)&lt;br /&gt;  (define (fun x y) &lt;br /&gt;    (lambda (#:value (value 'novalue))&lt;br /&gt;      (if (eq? value 'novalue)&lt;br /&gt;          getter&lt;br /&gt;          setter))))&lt;br /&gt;(defun summ x y value  &lt;br /&gt;  (+ (gv? x) (gv? y))&lt;br /&gt;  (sv! x (- value (gv? y))))&lt;br /&gt;(defun eqv x y value  &lt;br /&gt;  (= (gv? x) (gv? y))&lt;br /&gt;  (if (eq? value #t)&lt;br /&gt;      (sv! x (gv? y))&lt;br /&gt;      #f))&lt;br /&gt;&lt;br /&gt;(define x 56)&lt;br /&gt;(define (formula x y z) (eqv (summ x y) z))  ;запоминаем формулу x+y=z&lt;br /&gt;(sv! (eqv (summ (s! x) (g? 5)) (g? 9)) #t)  ;вычислить x такое, чтобы x+5=9&lt;br /&gt;x                                            ;возвращает 4&lt;br /&gt;(sv! (formula (s! x) (g? 3) (g? 10)) #t)    ;вычислить то же самое с использованием формулы&lt;br /&gt;x                                           ;возвращает 7&lt;br /&gt;(gv? (formula (g? x) (g? 5) (g? 12)))       ;вычислить логичекое выражение x+5=12&lt;br /&gt;                                            ;возвращает ИСТИНУ&lt;br /&gt;Кстати, у нас получилась определенная ленивость. Например выражение&lt;br /&gt;(sv! (eqv (summ (s! x) (g? 5)) (g? 9)) #f) &lt;br /&gt;не будет изменять значение x, т.к. мы передаем #f.&lt;br /&gt;По-моему идея, запихнуть результат обратно функции в ж..., довольно интересна и стоит размышлений :)</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_scheme:28799</id>
    <author>
      <name>dtnoizr</name>
    </author>
    <lj:poster user="dtnoizr" userid="12856623"/>
    <link rel="alternate" type="text/html" href="http://ru-scheme.livejournal.com/28799.html"/>
    <link rel="self" type="text/xml" href="http://ru-scheme.livejournal.com/data/atom/?itemid=28799"/>
    <title>ru_scheme @ 2009-05-10T12:06:00</title>
    <published>2009-05-10T08:09:23Z</published>
    <updated>2009-05-10T08:09:23Z</updated>
    <content type="html">как насчёт того, чтобы писать Flash анимацию прямо внутри PLT&amp;nbsp;Scheme?&lt;br /&gt;если ли кто заинтересованный в этом деле?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_scheme:28611</id>
    <author>
      <name>dtnoizr</name>
    </author>
    <lj:poster user="dtnoizr" userid="12856623"/>
    <link rel="alternate" type="text/html" href="http://ru-scheme.livejournal.com/28611.html"/>
    <link rel="self" type="text/xml" href="http://ru-scheme.livejournal.com/data/atom/?itemid=28611"/>
    <title>ru_scheme @ 2009-04-26T09:24:00</title>
    <published>2009-04-26T05:33:56Z</published>
    <updated>2009-04-26T05:33:56Z</updated>
    <content type="html">работаю в PLT Scheme&amp;nbsp; с sandbox-ами&lt;br /&gt;надо сделать, чтобы можно было многократно прерывать работу sandbox-а, передавая наружу некое сообщение, которое бы обрабатывалось и закидывало некое сообщение обратно вовнутрь sandbox-а.&lt;br /&gt;я пробовал с помощью обработки ошибок (вызывал raise) и &amp;quot;продолжений&amp;quot;, но делать это многократно (больше одного раза) не получается - продолжения перестают работать&lt;br /&gt;как такое сделать?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_scheme:28184</id>
    <author>
      <name>begemotv2718</name>
    </author>
    <lj:poster user="begemotv2718" userid="4251411"/>
    <link rel="alternate" type="text/html" href="http://ru-scheme.livejournal.com/28184.html"/>
    <link rel="self" type="text/xml" href="http://ru-scheme.livejournal.com/data/atom/?itemid=28184"/>
    <title>define_syntax</title>
    <published>2009-04-22T11:47:07Z</published>
    <updated>2009-04-22T11:47:07Z</updated>
    <content type="html">Недавно начал изучать SICP, не бейте слишком строго.&lt;br /&gt;&lt;br /&gt;Хотелось бы понять почему в SICP авторам как-то удачно удается обходится без define-syntax и явно определенных force и delay? В R5RS это не работает, собственно, натолкнулся на это, когда пытался сделать бесконечные потоки (streams) по методе, описанной в SICP. &lt;br /&gt;&lt;br /&gt;(define (cons-stream a b) (cons a (delay b)))&lt;br /&gt;(define (integers-from n) (cons-stream n (integers-from (+ n 1)))&lt;br /&gt;(define natural-numbers (integers-from 1))&lt;br /&gt;&lt;br /&gt;в R5RS немедленно заходит в бесконечный цикл. На самом деле надо писать &lt;br /&gt;(define-syntax cons-stream (syntax () (cons-stream a b) (cons a (delay b)))).&lt;br /&gt;&lt;br /&gt;Это что-то, похоже, связаное с порядком вычисления. В идеале бы хотелось еще понять, зачем было это изменение ;).</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_scheme:28045</id>
    <author>
      <email>goldfisherman@mail.ru</email>
      <name>wallenokk</name>
    </author>
    <lj:poster user="wallenokk" userid="19272657"/>
    <link rel="alternate" type="text/html" href="http://ru-scheme.livejournal.com/28045.html"/>
    <link rel="self" type="text/xml" href="http://ru-scheme.livejournal.com/data/atom/?itemid=28045"/>
    <title>Счётчик вызова рекурсивной процедуры</title>
    <published>2009-03-27T22:05:32Z</published>
    <updated>2009-03-27T22:05:32Z</updated>
    <content type="html">Никто не вставлял в рекурсивную процедуру счётчик вызова,&amp;nbsp;чтобы процедура возвращала значение этого счётчика?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_scheme:27878</id>
    <author>
      <name>Yuriy Al. Shirokov</name>
    </author>
    <lj:poster user="yushi" userid="598500"/>
    <link rel="alternate" type="text/html" href="http://ru-scheme.livejournal.com/27878.html"/>
    <link rel="self" type="text/xml" href="http://ru-scheme.livejournal.com/data/atom/?itemid=27878"/>
    <title>GNU Guile [solved]</title>
    <published>2008-12-09T10:57:10Z</published>
    <updated>2008-12-09T14:18:38Z</updated>
    <content type="html">А есть здесь люди с опытом использования libguile? Что-то я пока не понимаю даже, как выполнить произвольный схемный код.&lt;br /&gt;&lt;br /&gt;Проблема: вызов scm_c_eval_string роняет программу вместе с интерпретатором Схемы в случае ошибки, а scm_catch как-то довольно безумно работает, я не понимаю, что ему передавать в качестве второго аргумента. Или в случае scm_c_eval_string ошибки надо перехватывать другим способом? Или вместо scm_c_eval_string надо пользоваться чем-то ещё?&lt;br /&gt;&lt;br /&gt;Guile 1.8.4. The Guile Reference Manual читал, примеры гуглил. Всё равно ничего не понимаю.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;UPD&lt;/strong&gt; Проблема решена использованием scm_internal_catch, tnx2 &lt;span class='ljuser ljuser-name_airat' lj:user='airat' style='white-space:nowrap'&gt;&lt;a href='http://airat.livejournal.com/profile'&gt;&lt;img src='http://l-stat.livejournal.com/img/userinfo.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://airat.livejournal.com/'&gt;&lt;b&gt;airat&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;.</content>
  </entry>
</feed>

