LINUX.ORG.RU
Ответ на: комментарий от monk

1. Если обязательно нужен _функциональный_ стиль (ты не собираешься всё писать в лоб) - что-то вроде этого (каюсь, дальше определения html не разбирался). Единственное замечание - '(:html (:body (...))) - это список, и для его построения можешь использовать всю мощь лиспа :) В том числе `(:html (:body ,(list :p title)))

2. Если хочешь отказаться от eval - тогда написать свою макро по аналогии с html, которая берёт значение из глобальной переменной (как ты и спрашивал). Но это ужасно криво и я тебе это не советовал :)

3. Подписаться на рассылку lml2 и спросить - как тот-же результат получить функциями (или через параметры/подстановку/как угодно)

4. Генераторов html... иди на cliki.net :)

yyk ★★★★★
()
Ответ на: комментарий от tailgunner

> Потом было еще несколько книг, в которых о Лиспе говорилось в превосходной степени. Поэтому, когда у меня появился шанс использовать Лисп в деле, я попробовал (Guile, встраиваемая реализация Scheme). Впечатления - сугубо отрицательные, после месяца упорной грызни кактуса переделал все в Питон, о чем еще ни разу не пожалел.

1. Одного чтения мало. Я не хочу сказать, что полный тормоз, но "на досуге" "врубался" в лисп довольно долго, пока перестал тупить при виде первого попавшегося исходника. Вот потом "засосало". И и менно с тикля/питона/иже с ними.

2. Схема мне мение "по душе", но теперь это уже не имеет значения (с самого начала подкупило то, что CL такой большой :)

3. Ещё раз подтвержу: да, у питона сейчас больше "батареек из корбки"

yyk ★★★★★
()
Ответ на: комментарий от tailgunner

> То есть - ссылок нет.

есь одна. На это обсуждение. http://www.linux.org.ru/jump-message.jsp?msgid=1587106 вот

> Даже Die-Hard, которому мы обязаны этим флеймом, такого не говорил

он наверное сказал бы, если бы праведный гнев, сотрясавший ево, не помешал бы ему.

> "в чем ваша лисповая тайна, лисперы?"

Видимо всё-таки нужно но сложно переучивацо с алгоритмического стиля мышления на более абстрактный.

>> А вообще вот это: "питон ... ненамного хуже", оно дорогого стоит, да ;)

>> Это как?

> Лично мне приятно услышать от лиспера, что Питон "ненамного хуже".

Чесно говоря я таково не утверждал. Я утверждал что такая мысль (не моя) весьма отчётливо проскальзывала в этом треде.

bugmaker ★★★★☆
()
Ответ на: комментарий от redvasily

> непосредственно из лиспа ничего

возможно не непосредственно, а из других языков и наречий. Но в лиспе многое появилось впервые и там же доведено до совершенства.

> Питон это не передирка лиспа

ладно, поправлюсь.

s/некоторых заимствований из лиспа/некоторых ссущностей, которые давно есть в лиспе но либо отсосутствуют в других наречиях либо менее эффективны в них из-за более враждебново им синтаксиса этих наречий

bugmaker ★★★★☆
()
Ответ на: комментарий от tailgunner

>Мне кажется, что просто отключена проверка типов, и, если на входе 
процедуры - значение неправильного типа, на выходе - мусор. Нет?


По идее -- да. Я практически с этой стороной не возился плотно. На 
уровне игрушки потыркал -- смотрел, как он с FPU работает и пр.  
Однако сейчас проверил кое-что:


* (defun foo (a b)
           ;; optimized addition procedure; much leaner assembly
           (declare (optimize (speed 3) (safety 0) (debug 0)))
           (declare (type fixnum a b))
           (the fixnum (+ a b)))

FOO


* (foo 3 5)

8

* (foo "d" "f")
#<unknown immediate object, lowtag=#b110, widetag=#xC6 {14FE6CC6}>

*

Ругается. Так что, возможно, если при пользовании функциями 
неправильный тип нарисовался, то сообщит что-то.

Zubok ★★★★★
()
Ответ на: комментарий от bugmaker

>> То есть - ссылок нет.

> есь одна.

У меня по этой ссылке открылось начало обсуждения, в котором Die-Hard _не_ говорит о том, что Лисп не нужен :-P

>> "в чем ваша лисповая тайна, лисперы?"

> Видимо всё-таки нужно но сложно переучивацо с алгоритмического стиля мышления на более абстрактный.

Вот-вот, и я о том же. Лисперы достигли такого уровня абстракции, что понятиями мельче "стиль мышления" не оперируют. Может, отсюда и подозрения в шарлатанстве? КОНТРОЛЬНЫЙ СМАЙЛИК: ";)"

>> Лично мне приятно услышать от лиспера, что Питон "ненамного хуже".

>Чесно говоря я таково не утверждал.

Прочтано в твоем посте... Да ладно, оговорка по Фрейду, дело житейское - с кем не бывает ;) Подумаешь, тайный серпентофил - всё нормально, добро пожаловать в клуб 8)

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> У меня по этой ссылке открылось начало обсуждения, в котором Die-Hard _не_ говорит о том, что Лисп не нужен :-P

Так он и не говорит чё лисп нужен. Да он ваще ничё не говорит, токо ругаецо :(

> понятиями мельче "стиль мышления" не оперируют.

ещё как оперируют! аж шум стоит! только в тех случяях когда это уместно, а не потому што выбор чем оперировать невелик

> тайный серпентофил

не, умя токо цынопсы есь самое к змяюкам ближайшее

> добро пожаловать в клуб

спасибо, воспользуюсь предложением. Вот только бензопилу заправлю сперва и пойду.

кстати, ПОЗДРАВЛЯЮ! МЫ В ТОР 10!

bugmaker ★★★★☆
()
Ответ на: комментарий от Zubok

> Ругается. Так что, возможно, если при пользовании функциями неправильный тип нарисовался, то сообщит что-то.

Тогда это не может компилироваться в одну инструкцию "add" %)

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Функция - может, а вот её вызов... ;)

yyk ★★★★★
()
Ответ на: комментарий от bugmaker

Причем в Си/Си++ она _реально_ в одну инструкцию компилируется ;) А в Lisp там еще и ret есть :-P

Но в Си/Си++ компилятор типы проверяет, так что мусора на входе не будет, если ты сам не захочешь ;)

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Мы на первом месте, с чисто техническим флеймом.

LOL! Не, ну нельзя же так - живот можно со смеху ндорвать... :)

yyk ★★★★★
()
Ответ на: комментарий от tailgunner

>Тогда это не может компилироваться в одну инструкцию "add" %)

Ну если подумать, то, скорее всего, он ругается на более раннем этапе. Ведь еще же есть цепочка событий, которая идет от REPL. :) Как только я в REPL написал (foo "2" "3"), он пытается засунуть эти вещи в регистры, которые в сложении учавствуют. Видит, что тип не тот (неупаковываемый в понятие fixnum), и раппортует. Я попробовал не REPL, а вызов foo из другой функции. При указании чисел с плавающей точкой SBCL также ругнулся. Так что думаю, ругается он еще до вызова функции, а в самой функции проверок нет, как видишь. Ничего более точного сказать не могу. Этой стороной я плотно не занимался пока.

Zubok ★★★★★
()
Ответ на: комментарий от yyk

>> Мы на первом месте, с чисто техническим флеймом.

>LOL! Не, ну нельзя же так - живот можно со смеху ндорвать... :)

Смейся! Смех удлиняет жизнь.

tailgunner ★★★★★
()
Ответ на: комментарий от yyk

> 3. Ещё раз подтвержу: да, у питона сейчас больше "батареек из корбки"

А есть интерфейсы Lisp --- .NET, Lisp --- Java, этим пользуются?

Можно нахаляву загрести батарейки из чужой коробки. :-)

У меня вопросы к местным лисперам (без подколов, мне правда очень интересно):

1. Как вы подcели на лисп?

2. Какой самый крупный проект вы на нём написали?

redvasily
()
Ответ на: комментарий от tailgunner

> Причем в Си/Си++ она _реально_ в одну инструкцию компилируется ;) А в Lisp там еще и ret есть :-P

Это если инлайн. А инлайн там из-за скудности макросов :P

> Но в Си/Си++ компилятор типы проверяет,

Дык в лиспе тоже может проверить при желании

bugmaker ★★★★☆
()
Ответ на: комментарий от tailgunner

> А где толпа анонимусов?

Да, действительно. и Die-Hard кудато подевался...

bugmaker ★★★★☆
()
Ответ на: комментарий от bugmaker

>> Причем в Си/Си++ она _реально_ в одну инструкцию компилируется ;) А в Lisp там еще и ret есть :-P

> Это если инлайн. А инлайн там из-за скудности макросов :P

Скудости, щедрости - не важно. Главное, что в реально одну инструкцию :)

>> Но в Си/Си++ компилятор типы проверяет,

>Дык в лиспе тоже может проверить при желании

В каком из Лиспов? Что-то я не помню в Scheme объявления типов аргументов. Или глобальный type inference? Тоже что-то не слышал о таком в Лиспе.

tailgunner ★★★★★
()
Ответ на: комментарий от redvasily

> А есть интерфейсы Lisp --- .NET, Lisp --- Java, этим пользуются?

чё за тырфейсы? сокеты чёли? сокеты есь. Для взаимодействия с другими наречиями - http://www.cliki.net/compatibility%20layers . Есь Kawa - схема, диалект лиспа, работающяя в JVM. для дотнетиненады - никогда не интересовался. Наверное нету потомушто дотнетиненадо - ЛАЖА а лисперы ЛАЖУ не любют.

> 1. Как вы подcели на лисп?

Читал статью "побеждая посредственнось". На то время умя выдалась на редкось тупая работа, и я, пока увольнялся, решил проверить, действительно ли правда чё там писано, просто со скуки. Ожидал нескко большево, но вобщем-то и так неплохо.

> 2. Какой самый крупный проект вы на нём написали?

Достаточно крупный - никакой. Для своих целей много всякой хни до нескольких сотен строк длиной. Есь задумки для пары проектов, но не уверен чё когданть приступлю к реализации.

bugmaker ★★★★☆
()
Ответ на: комментарий от redvasily

> А есть интерфейсы Lisp --- .NET, Lisp --- Java, этим пользуются?

Интерфейсы есть. Кому надо - пользуются. Но таких - меньшинство даже среди лисперов.

> 1. Как вы подcели на лисп?

Да вот маялся между всякими питонами/тиклями/уже не помню чем. Везде что-то не устраивало. Ну и когда задавал вопросы в эхах - как сделать то, как сделать это - периодически посылали: это тебе лисп нужен... :) Поверил :) Вернее - полез знакомится. И чем больше знакомился - тем меньше пользовался всем остальным.

> 2. Какой самый крупный проект вы на нём написали?

In public - никакой :) Те реализации CL, которые меня устраивают по некоторым критериям (мультиплатформенность, ОС) - не устраивают своим "содержанием". Да и многие "батарейки" далеки от рабочего состояния. Приходится принимать участие в доводке всего этого до ума.

P.S. Я не профессиональный программист - это хобби, помогающее по работе :)

yyk ★★★★★
()
Ответ на: комментарий от tailgunner

> Скудости, щедрости - не важно. Главное, что в реально одну инструкцию :)

Дык запихай в макрос вместо, будет и в лиспе.

> В каком из Лиспов?

А про какой мы теперь обсуждаем где (declare (type fixnum a b))

bugmaker ★★★★☆
()
Ответ на: комментарий от bugmaker

>> Скудости, щедрости - не важно. Главное, что в реально одну инструкцию :)

>Дык запихай в макрос вместо, будет и в лиспе.

Как насчет проверки типов параметров макроса?

>> В каком из Лиспов?

>А про какой мы теперь обсуждаем где (declare (type fixnum a b))

Ну ни слова в простоте... :( Речь шла о Steel Bank CL, но является ли это фишкой _всех_ CL?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Мы на первом месте, с чисто техническим флеймом. Ну ни фига себе... А где толпа анонимусов?

Dream come true ;-).

Кстати, 26 октября в Киеве будет Python meetup #5, впервые дискуссия будет структурирована и посвящена использованию Python для Web. :-)

eugine_kosenko ★★★
()
Ответ на: комментарий от tailgunner

> Речь шла о Steel Bank CL, но является ли это фишкой _всех_ CL?

Это является "фишкой" CL (стандарта), но некоторые реализации (cLisp например) на многие объявления "кладут"

yyk ★★★★★
()
Ответ на: комментарий от redvasily

> Как вы подcели на лисп?

Антихрист совратил. А потом ещё sicp прочитал и проникся.

> Какой самый крупный проект вы на нём написали?

Крупного я на нём ничего не писал.

ugoday ★★★★★
()
Ответ на: комментарий от eugine_kosenko

> И зря. Ламбда в Питоне -- лучшее средство для вхождения в Лисп :-).

Наверное испугался всё увеличивающегося количества "перебежчиков" ;)

yyk ★★★★★
()
Ответ на: комментарий от eugine_kosenko

>> Гвидо осознал свою ошибку, раскаивается и сожалеет

> И зря

IIRC, С тех пор Гвидо уже раскаялся, в том, что раньше рскаялся, и переосознал лямбду 8)

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> IIRC, С тех пор Гвидо уже раскаялся, в том, что раньше рскаялся, и переосознал лямбду 8)

Жжошь.

Поверю что Гвидо раскаялся в раскаянии после того как он сделает синатксис для многострочных лямбд.

redvasily
()
Ответ на: комментарий от tailgunner

> Как насчет проверки типов параметров макроса?

не трабла, хоть одново, хоть половины хоть всех скопом

[1]> (defmacro tst (a b) `(format t "~S ~S~%" (the fixnum ,a) ,b))
TST
[2]> (tst 1 2)
1 2
NIL
[3]> (tst 1 "2")
1 "2"
NIL
[4]> (tst "1" "2")

*** - THE: "1" при вычислении возвратила следующие значения ("1"), не принадлежащие типу FIXNUM
Break 1 [5]> 


> но является ли это фишкой _всех_ CL?

не.

bugmaker ★★★★☆
()
Ответ на: комментарий от redvasily

> Тут один товарищ рядом почитал этот флейм и сказал: "И какой идиот сказал что язык программирования это точка в идеальном пространстве!" :-)

Не правда!!! Я не упоминал Достоевского. А точкой в идеальном пространстве можно назвать что угодно... А можно еще оболочки и срезы начать рассматривать. Worse is Better!

Кстати кто как относится к этой философии?

anonymous
()
Ответ на: комментарий от anonymous

Семён, да не надо тут уже флеймить. И без этого на первом месте :-)

Ты лучше зарегестрируйся и заведи новую тему про "Worse is Better"

redvasily
()
Ответ на: комментарий от bugmaker

>> Как насчет проверки типов параметров макроса?

> не трабла

Хм... а то, что все проверяемые значения - литералы, это, конечно, чистая случайность? ;)

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

> А точкой в идеальном пространстве можно назвать что угодно...

а что можно назвать идеальным пространством?

> Кстати кто как относится к этой философии?

моя философия beer is better. bad beer is better than nothing.

bugmaker ★★★★☆
()
Ответ на: комментарий от redvasily

> Поверю что Гвидо раскаялся в раскаянии после того как он сделает синатксис для многострочных лямбд.

Увы нам, он не настолько раскаялся и осознал.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

> Worse is Better!

> Кстати кто как относится к этой философии?

Да мы живем по ней

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Хм... а то, что все проверяемые значения - литералы, это, конечно, чистая случайность? ;)

не понел, а кем оне должны быть?

bugmaker ★★★★☆
()
Ответ на: комментарий от tailgunner

как ты представляеш себе макрос с переменными? их же значение может быть неопределено на момент компиляции ну ваще. Макросы код на лиспе генерят есличё...

bugmaker ★★★★☆
()
Ответ на: комментарий от bugmaker

> Макросы код на лиспе генерят есличё...

Это понятно

> как ты представляеш себе макрос с переменными?

ХЗ. Я вообще Лисп плохо знаю. Твоими руками я пытаюсь решить такую задачу: обернуть некую функцию в макрос, который выдавал бы ошибку (на этапе трансляции!), если аргумент функции имеет не тот тип. Понятно, что аргумент может быть как аргументом, так и литералом. Можно ли такое сделать?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Твоими руками я пытаюсь решить такую задачу: обернуть некую функцию в макрос, который выдавал бы ошибку (на этапе трансляции!), если аргумент функции имеет не тот тип.

Ох уж эта динамическая типизация... Статическая типизация и ocaml рулят.

PS. Ну надо же развивать флейм...

Zulu ★★☆☆
()
Ответ на: комментарий от Zulu

> Ох уж эта динамическая типизация...

Аминь, брат.

> Статическая типизация и ocaml рулят.

Насчет статической типизации - аминь, а Ocaml - он еще маргинальнее Лиспа.

tailgunner ★★★★★
()
Ответ на: комментарий от Zulu

> PS. Ну надо же развивать флейм...

Да мы и так уже гордимся своими успехами во флеймостроении 8)

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Понятно, что аргумент может быть как аргументом, так и литералом.

Во время выполнения макры некоторую обработку параметров можно вести, но, как правило, это касается только значений или списков. С литералами хуже: текущее пространство имен и т.п. Не видел. Попробуйте... :)

yyk ★★★★★
()
Ответ на: комментарий от Zulu

Кстати о статической типизации, недавно нашёл один интересный лисп: http://lush.sourceforge.net/. В нём есть офигенно эффективный компилятор для статически типизированного кода. Если быть точным, генерируется код на C, и код получается обычно такой же, как я бы руками написал. Ну и что меня вообще добило, в программу на лиспе можно запросто делать вставки на С. :) Кто там хотел лисп с ассемблерными вставками? Да лехко! :D

ero-sennin ★★
()
Ответ на: комментарий от Zubok

> Исхожу из того, что ASDF установлен вместе с SBCL. Если у тебя
> Gentoo или Debian, то просто установи common-lisp-controller. ASDF
> вместе с ним поставится.

У меня Gentoo. common-lisp-controller был установлен по зависимостям sbcl.

> Распаковываешь в ~/sbcl
> http://common-lisp.net/project/cffi/releases/cffi_0.9.2.tar.gz

$ emerge --search cffi
Searching...
[ Results for search key : cffi ]
[ Applications found : 1 ]

* dev-lisp/cl-cffi
Latest version available: 0.9.1
Latest version installed: 0.9.1
Size of files: 144 kB
Homepage: http://common-lisp.net/project/cffi/
Description: The Common Foreign Function Interface (CFFI)
License: BSD

Пойдет? Для верности, сделал и так, как ты сказал.

====================================================================
> Распаковываешь в ~/sbcl
> ftp://common-lisp.net/pub/project/lambda-gtk/lambda-gtk-0.1.tar.gz

ERROR
The requested URL could not be retrieved

While trying to retrieve the URL: ftp://common-lisp.net/pub/project/lambda-gtk/lambda-gtk-0.1.tar.gz

The following error was encountered:

* Connection to 80.68.86.115 Failed

The system returned:

(111) Connection refused

The remote host or network may be down. Please try the request again.

Your cache administrator is root.
Generated Thu, 05 Oct 2006 18:02:59 GMT by base.home (squid/2.6.STABLE3)

====================================================================
> $ ln -s /home/.../sbcl/lambda-gtk-0.1/lambda-gtk.asd lambda-gtk.asd
> $ ln -s /home/.../sbcl/lambda-gtk-0.1/lambda-gtk-examples.asd lambda-gkt-examples.asd

$ tar tvzf /usr/portage/distfiles/lambda-gtk-0.1.tar.gz|grep asd
$ tar tvzf /usr/portage/distfiles/lambda-gtk-0.1.tar.gz
drwxr-xr-x hkt/admin 0 2004-11-30 17:03:40 lambda-gtk-0.1/
-rw-r--r-- hkt/admin 12404 2004-11-30 15:30:55 lambda-gtk-0.1/examples.lisp
-rw-r--r-- hkt/admin 117529 2004-11-30 14:08:52 lambda-gtk-0.1/gtk.api
-rw-r--r-- hkt/admin 1577076 2004-11-30 14:08:54 lambda-gtk-0.1/gtk.ffi
-rw-r--r-- hkt/admin 727092 2004-11-30 15:25:43 lambda-gtk-0.1/gtkffi-cmusbcl.lisp
-rw-r--r-- hkt/admin 409130 2004-11-30 15:27:02 lambda-gtk-0.1/gtkffi-openmcl.lisp
-rw-r--r-- hkt/admin 29597 2004-11-30 14:09:08 lambda-gtk-0.1/lambda-gtk-cmusbcl.lisp
-rw-r--r-- hkt/admin 22027 2004-11-30 14:54:36 lambda-gtk-0.1/lambda-gtk-common.lisp
-rw-r--r-- hkt/admin 16651 2004-11-30 15:26:39 lambda-gtk-0.1/lambda-gtk-openmcl.lisp
-rw-r--r-- hkt/admin 12871 2004-11-30 16:25:21 lambda-gtk-0.1/lambda-gtk.html
-rw-r--r-- hkt/admin 27949 2004-11-30 14:09:09 lambda-gtk-0.1/llgpl.text

====================================================================
> Запускаешь SBCL.

> REPL> (asdf:operate 'asdf:load-op 'lambda-gtk-examples)

$ sbcl
This is SBCL 0.9.17, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>;.

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses. See the CREDITS and COPYING files in the
distribution for more information.
* (asdf:operate 'asdf:load-op 'lambda-gtk-examples)

; loading system definition from
; /usr/share/common-lisp/systems/lambda-gtk-examples.asd into #<PACKAGE "ASDF0">
; registering #<SYSTEM LAMBDA-GTK {1002695F91}> as LAMBDA-GTK

debugger invoked on a SIMPLE-TYPE-ERROR: Argument Y is not a REAL: NIL

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
0: [ABORT] Exit debugger, returning to top level.

(SB-KERNEL:TWO-ARG-< 3369060521 NIL)
0]

====================================================================

Что еще?

eugine_kosenko ★★★
()
Ответ на: комментарий от tailgunner

такое будет ругацо на этапе компиляции

(defun foo (a b) (declare (optimize (speed 3) (safety 0) (debug 0))) (declare (type fixnum a b)) (+ a b))

(defmacro bar (x y) `(foo ,x ,y))

(format t "~D~%" (bar "a" "b"))

потомушто сначяло макром сгенерицо код а потом код будет компилицо если типы, передаваемых в функцию не совпадут, будет ругацо, без разницы, функция вызвата из другой функции или из макра. Ты про такое спрашивал?

bugmaker ★★★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.