Re[9]: Lisp
От: Курилка Россия http://kirya.narod.ru/
Дата: 14.07.05 08:30
Оценка:
А вот реши туже задачу, если не трудно, на плюсах — тыж лисп с ними сравнивал кругом тут
Re[10]: Lisp
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 14.07.05 08:34
Оценка:
Здравствуйте, Курилка, Вы писали:

К>А вот реши туже задачу, если не трудно, на плюсах — тыж лисп с ними сравнивал кругом тут


А я ее на Ruby уже решил: Re[6]: Lisp
Автор: eao197
Дата: 14.07.05

А вот на плюсах мне не интересно -- я приблизительно знаю, что получится. И главная сложность в том, что нужно сначала какой-нибудь XML парсер выбрать. Но, т.к. я с XML по своей основной работе не сталкиваюсь, то колупаться с каким-то С++ XML парсером для спортивного интереса у меня стимула нет.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[9]: Lisp
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.07.05 08:53
Оценка: +1
Здравствуйте, eao197, Вы писали:

E>Как и можно было ожидать, самый компактный код получился у специально предназначенного для этого инструмента.


Знаешь, меня в данном случае интересует больше не компактность в символах, а компактность в смысловых конструкциях. И тут уже все не так очевидно.

E>Андрей, а в чем удобство выражается? В том, что есть специальные инструменты для создания таких XSLT?


1) Возможность описания хотя бы части структуры выходного кода декларативно. ПО сравнению с конкатенациями и строковыми константами в императивных программах это сильно упрощает поддержку и снижает вероятность глупых ошибок.
2) Готовый инструментарий для создания, контроля, расширения и т.п. Например, если мне нужно написать алгоритмы, которые проще выразить императивно я просто пишу эот код на шарпе.
3) Возможность обработок шаблонов все теми же xml-парсерами.

E>Вот мне показалось, что если, наприемер, потребуется убрать знак подчеркивания из имент атрибутов (или заменить его на другой префикс), то поле для ошибок в XSLT больше окажется.


Нет. Потому что в xslt есть переменные. Просто в данном случае вероятность того, что это понадобиться сделать стремиться к 0.
... << RSDN@Home 1.2.0 alpha rev. 558>>
AVK Blog
Re[9]: Lisp
От: Cyberax Марс  
Дата: 14.07.05 08:57
Оценка:
faulx wrote:

>>> Нетривиальные веши — не просты — это факт

>>> Тестировать, а точнее писать,компилировать,править, шаблоны на С++
>>> IMHO на порядок сложнее.
> C>Но оно правится и тестируется во время компиляции — а это большой плюс.
> А Лисповские макросы когда?

Никогда. Оно может и в ран-тайме код уродовать.

> И потом, где в С++ аналог функции marcoexpand, которая позволяет

> посмотреть, во что развернется указанный макрос?

Нет, так как она не очень-то и нужна — темплейты не разворачиваются, а
инстанцируются.

> C>Еще у шаблонов есть преимущество — они локальны (почти), то есть один

> C>шаблон не оказывает влияния на другие. Так что отлаживать их вполне
> C>нормально.
> Разве в Лиспе система package'ей не распространаяется на макросы?

Немного не то имею в виду — макрос при желании может как угодно изменить
тело функции, шаблон же меняет только типы переменных.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[9]: Lisp
От: Cyberax Марс  
Дата: 14.07.05 09:03
Оценка:
eao197 wrote:

> Как и можно было ожидать, самый компактный код получился у специально

> предназначенного для этого инструмента.
> Андрей, а в чем удобство выражается? В том, что есть специальные
> инструменты для создания таких XSLT?

Есть — XMLSpy, например. Там это даже графически рисовать можно.

Но XML дает еще кучу других преимуществ: декларативная валидация по XSD,
умный автокомплит (по XSD/DTD), генерация биндингов к куче языков,
удобные редакторы и т.п.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[3]: Lisp
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.07.05 09:03
Оценка:
Здравствуйте, CrazyPit, Вы писали:

CP>Что вас конкретно интересует? Простой генератор? Тогда здесь лисп не будет принципиально лучше других языков. Или DSL на основе макросов, который будет генерировать native код и позволит использовать всю мощь лиспа внутри этого макроса, вот второе это уже то в чём лисп силён. (но я пока не силён В том же Practical Common Lisp две предпоследнии главы посвещены этой теме, только там генерируется html.


Я описал что меня интересует. Только, заметь, я описал задачу, а не способы ее решения. XML тут, разумеется, не самоцель. Подойдет любой текстовый декларативный формат, который описывается декларативной же схемой, контролирующей синтаксическую структуру. Императивные возможности в этом формате не нужны и вредны. Цель — создать по описанной этим форматом модели код на C#. Именно на C#, это обязательное требование.

CP>Но я всё-таки, в рамках тренеровки, написал простой генератор, который делает примерно то-что вы написали, только не из XML а из sexpr'ов, т.к. мне сейчас лень возиться с каким-то либами (так-что всё написано на чистом CL), но я думаю с помощью CL-XML можно быстро преобразовать XML в тот вид что у меня, или вообще сделать всё намного короче.


CP>

CP>(defparameter *test-desc*
CP> '(:objects
CP>   (:object :name "Obj1"
CP>    (:property :name "prop1" :type "int")
CP>    (:property :name "prop2" :type "string"))
CP>   (:object :name "Obj2"
CP>    (:property :name "foo10" :type "string")
CP>    (:property :name "bar12" :type "sometype"))))

CP>


Вопрос — насколько тщательно контролируется структура того, что ты привел?

CP>Вроде практически аналогично XML.


Только двоеточия какие то странные.

CP>Вот реализация:


CP>
CP>


Мда, сурово. Я, если честно, ожидал поменьше.

P.S. Большая просьба — лишнее цитирование из ответа выкидывать.
... << RSDN@Home 1.2.0 alpha rev. 558>>
AVK Blog
Re[8]: Lisp
От: aka50 Россия  
Дата: 14.07.05 09:11
Оценка: 4 (1)
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, eao197, Вы писали:


E>>Ну, решения на Lisp-е и Ruby приведены. Осталось посмотреть на две строчки XSLT.


блин... не успел свое выложить . Опередил.

    
    <template match="property">
    private <value-of select="@type"/> _<value-of select="@name"/>;
    public <value-of select="@type"/> <value-of select="@name"/>
    {
        get { return _<value-of select="@name"/>; }
    }
    </template>


Но ошибочка. По условию public должен быть с большой буквы:
Так что строчек чуток по больше будет

    <template match="property">
    private <value-of select="@type"/> _<value-of select="@name"/>;
    public <value-of select="@type"/> <call-template name="capitalize"> <with-param name="toconvert" select="@name" />  </call-template>
    {
        get { return _<value-of select="@name"/>; }
    }
    </template>

  <xsl:template name='capitalize'>
    <xsl:variable name="lcletters">abcdefghijklmnopqrstuvwxyz</xsl:variable>
    <xsl:variable name="ucletters">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>

    <xsl:param name='toconvert' />

    <xsl:if test="string-length($toconvert) > 0">
      <xsl:variable name='f' select='substring($toconvert, 1, 1)' />
      <xsl:variable name='s' select='substring($toconvert, 2)' />

      <xsl:value-of select="translate($f,$lcletters,$ucletters)"/><xsl:value-of select="$s"/>
    </xsl:if>
  </xsl:template>
Re[6]: Lisp
От: aka50 Россия  
Дата: 14.07.05 09:21
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А зачем тогда Lisp? XSLT и конечное решение в две строчки пишется.

Но лисп то появился до XSLT . Почему ж изобрели лисапед вместо того, чтобы лисп или ту же схему
подлатать? .
Re[10]: Lisp
От: faulx  
Дата: 14.07.05 09:23
Оценка: 1 (1)
Здравствуйте, Cyberax, Вы писали:

>> C>Но оно правится и тестируется во время компиляции — а это большой плюс.

>> А Лисповские макросы когда?

C>Никогда.


Неужели я первый человек в мире, кто отлаживал и тестировал Лисповские макросы? Требую приз!

C>Оно может и в ран-тайме код уродовать.


Макросы? Которые defmacro? В рантайме? Или мы про что-то другое говорим?

>> И потом, где в С++ аналог функции marcoexpand, которая позволяет

>> посмотреть, во что развернется указанный макрос?

C>Нет, так как она не очень-то и нужна — темплейты не разворачиваются, а

C>инстанцируются.

А в Лиспе нужна, и поэтому есть. Да и в С++ что-нибудь подобное не помешало бы — помогло бы отлаживать разворачивание циклов, вычисление констант метапрограммированием, expression template и т.п. Пока что это приходится делать в голове.

C>Немного не то имею в виду — макрос при желании может как угодно изменить

C>тело функции, шаблон же меняет только типы переменных.

Но как макрос меняет тело функции — посмотреть всегда можно, а вот какие типы переменных появятся в С++ — очень тяжело.
Re[7]: Lisp
От: Cyberax Марс  
Дата: 14.07.05 09:26
Оценка:
aka50 wrote:

> VD>А зачем тогда Lisp? XSLT и конечное решение в две строчки пишется.

> Но лисп то появился до XSLT . Почему ж изобрели лисапед вместо того,
> чтобы лисп или ту же схему
> подлатать? .

А можно парсер Лиспа в 12 килобайт кода?

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[8]: Lisp
От: aka50 Россия  
Дата: 14.07.05 09:29
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>А можно парсер Лиспа в 12 килобайт кода?


Простенький — пожалста:

здесь

-rwxr-xr-x  1 aka50 aka50 12876 Jul 14 13:26 lisp*
-rw-r--r--  1 aka50 aka50 16901 Feb 19 01:43 lisp.c
-rw-r--r--  1 aka50 aka50  1662 Feb 19 01:26 lisp.h
-rw-r--r--  1 aka50 aka50  9496 Jul 14 13:28 lisp.o
Re[8]: Lisp
От: Курилка Россия http://kirya.narod.ru/
Дата: 14.07.05 09:34
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>aka50 wrote:


>> VD>А зачем тогда Lisp? XSLT и конечное решение в две строчки пишется.

>> Но лисп то появился до XSLT . Почему ж изобрели лисапед вместо того,
>> чтобы лисп или ту же схему
>> подлатать? .

C>А можно парсер Лиспа в 12 килобайт кода?


А зачем парсер? Сразу интерпретатор да и всё, в 12 кило запихать его вполне думаю можно, вопрос с полной спецификацией Common Lisp — тут 12 не обойдёшься, а ядро самого вполне. Просто в стандарт входит ещё куча всего вспомогательного — разных макросов и т.п.
Вопрос — а парсер XSLT у тебя 12 килобайт? Откуда магическая цифра?
Re[9]: Lisp
От: Cyberax Марс  
Дата: 14.07.05 09:36
Оценка:
aka50 wrote:

> C>А можно парсер Лиспа в 12 килобайт кода?

> Простенький — пожалста:
> здесь <http://exmortis.narod.ru/src_inter.html&gt;

Не простенький, а полноценный. Этот даже строковые литералы не парсит.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[10]: Lisp
От: aka50 Россия  
Дата: 14.07.05 09:47
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>aka50 wrote:


>> C>А можно парсер Лиспа в 12 килобайт кода?

>> Простенький — пожалста:
>> здесь <http://exmortis.narod.ru/src_inter.html&gt;

C>Не простенький, а полноценный. Этот даже строковые литералы не парсит.

А покажи плиз XML+XSLT процессор чтоб в 12 кил влез... Я посмотрю.
xerses + DOM почти 4 мега весят.
Re[10]: Lisp
От: aka50 Россия  
Дата: 14.07.05 09:55
Оценка: 1 (1)
Здравствуйте, Cyberax, Вы писали:

C>aka50 wrote:


>> C>А можно парсер Лиспа в 12 килобайт кода?

>> Простенький — пожалста:
>> здесь <http://exmortis.narod.ru/src_inter.html&gt;

C>Не простенький, а полноценный. Этот даже строковые литералы не парсит.


К стати, тут собственно не лисп нужен а sexpr интерпретатор .
Дык вот он есть: http://sexpr.sourceforge.net/ правда либа весит 30к,
но думаю это не сильно важно .

This library is intended for developers who wish to manipulate (read, parse, modify, and create) symbolic expressions from C or C++ programs. A symbolic expression, or s-expression, is essentially a LISP-like expression such as (a (b c)). S-expressions are able to represent complex, structured data without requiring additional meta-data describing the structure. They are recursively defined: an s-expression is a list of either atoms or s-expressions. In the example above, the expression contains an atom "a" and an s-expression, which in turn contains two atoms, "b" and "c". They are simple, useful, and well understood.

This library is intended to be a minimal set of functions and structures for the four functions listed above: reading s-expressions (I/O), parsing strings containing them into an AST equivalent, modifying the AST representation, and converting the AST back into a well formatted string. The primary goals are efficiency and simplicity. This library forms the basis of the data representation and transmission protocol for the supermon high-speed cluster monitoring system from the LANL ACL. The usefulness and lack of choice in available, open source s-expression libraries motivated the independent (from supermon) release of this library. Although the number of potential users represents a rather small community, the author felt it was a valuable contribution. As of March 2003, this library has actually received more interest in terms of downloads and page views than it's parent project!

Re[9]: Lisp
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 14.07.05 09:56
Оценка:
Здравствуйте, aka50, Вы писали:

A>Но ошибочка. По условию public должен быть с большой буквы:


Это не ошибка. Просто в приведенном варианте большую букву тоже не добавляли.

A>Так что строчек чуток по больше будет


Нет, если написать <value-of select="helper:Capitalize(@name)"/>.
... << RSDN@Home 1.2.0 alpha rev. 558>>
AVK Blog
Re[11]: Lisp
От: Cyberax Марс  
Дата: 14.07.05 09:57
Оценка:
aka50 wrote:

>>> C>А можно парсер Лиспа в 12 килобайт кода?

>>> Простенький — пожалста:
>>> здесь <http://exmortis.narod.ru/src_inter.html&gt;
> <http://exmortis.narod.ru/src_inter.html%3E&gt;
> C>Не простенький, а полноценный. Этот даже строковые литералы не парсит.
> А покажи плиз XML+XSLT процессор чтоб в 12 кил влез... Я посмотрю.
> xerses + DOM почти 4 мега весят.

А кто сказал, что мне нужен именно DOM? Для XMLя есть еще и SAX (тоже
стандартизованный, кстати).

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[9]: Lisp
От: Cyberax Марс  
Дата: 14.07.05 09:58
Оценка:
Курилка wrote:

> C>А можно парсер Лиспа в 12 килобайт кода?

> А зачем парсер? Сразу интерпретатор да и всё, в 12 кило запихать его
> вполне думаю можно, вопрос с полной спецификацией Common Lisp — тут 12
> не обойдёшься, а ядро самого вполне. Просто в стандарт входит ещё куча
> всего вспомогательного — разных макросов и т.п.

Ну-ну. Уже была ссылка на интерпретатор Лиспа в 16Кб. Только вот он даже
строковые литералы не поддерживает.

> Вопрос — а парсер XSLT у тебя 12 килобайт? Откуда магическая цифра?


Столько занимает С++ный SAX парсер.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[10]: Lisp
От: Курилка Россия http://kirya.narod.ru/
Дата: 14.07.05 10:06
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Курилка wrote:


>> C>А можно парсер Лиспа в 12 килобайт кода?

>> А зачем парсер? Сразу интерпретатор да и всё, в 12 кило запихать его
>> вполне думаю можно, вопрос с полной спецификацией Common Lisp — тут 12
>> не обойдёшься, а ядро самого вполне. Просто в стандарт входит ещё куча
>> всего вспомогательного — разных макросов и т.п.

C>Ну-ну. Уже была ссылка на интерпретатор Лиспа в 16Кб. Только вот он даже

C>строковые литералы не поддерживает.

>> Вопрос — а парсер XSLT у тебя 12 килобайт? Откуда магическая цифра?


C>Столько занимает С++ный SAX парсер.


Тебе ехать или шашечки? И чего тебе даст сакс парсер в рамках данной задачи? Непонятно что ты этим хочешь показать...
Re[10]: Lisp
От: aka50 Россия  
Дата: 14.07.05 10:08
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, aka50, Вы писали:


A>>Но ошибочка. По условию public должен быть с большой буквы:


AVK>Это не ошибка. Просто в приведенном варианте большую букву тоже не добавляли.


A>>Так что строчек чуток по больше будет


AVK>Нет, если написать <value-of select="helper:Capitalize(@name)"/>.


сорри за невежество, но google не помог. helper — это че за неймспейс такой?
Вот эта штука его не поняла:
Using libxml 20616, libxslt 10112 and libexslt 810
xsltproc was compiled against libxml 20616, libxslt 10112 and libexslt 810
libxslt 10112 was compiled against libxml 20616
libexslt 810 was compiled against libxml 20616


Это случаем не MS-specific?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.