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

> Он мне кажется (субъективно) таким неуклюжим, всякие эти многочисленные xrange xlat [a:b]

xrange я редко использую - зачем, если есть просто итерация по массиву и map.

> А ништяков вроде комплексных чисел и rationalize нету

Ты просто мало знаешь о Питоне :-P Комплексные числа есть

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

> Имхо С версия гораздо более неуклюжая.

Само собой, но зачем сравнивать с макроассемблером? У С совершенно иная ниша ведь. Лиспаналог: (dotimes (x 10) ...тут х меняецо от 0 до 9...)

>[a:b] это слайс, т.е. для списка это новый список состоящий из элементов от а до b, исключая b

(subseq x a b). b можно упустить, и тогда вернётся подпоследовательнось от а до конца

> Где это сделано лучше?

Это всё простые вещи, их трудно сделать как лучше так и хуже. Видиш, в лиспе есть их полные аналоги. Разница в том, что, как мы убедились на примере перестановок, эти далеко не всегда нужны и их применение - оптимальный способ. Поэтому то и сложно челу, незнакомому с лиспом, объяснить, чем этот самы лисп лучше. Так же сложно, как например вендузятнегу объяснить чё такое виртуальные рабочие столы и почему без них неудобно.

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

> Чем это не устраивает?

Да фих ево знаит, злой я какойто сёдня. 

>>> from math import sqrt
>>> sqrt(2)
1.4142135623730951
>>> sqrt(-2)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
ValueError: math domain error
>>> 

Так получается что в питоне два разных корня?

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

>>[a:b] это слайс, т.е. для списка это новый список состоящий из элементов от а до b, исключая b

>(subseq x a b). b можно упустить, и тогда вернётся подпоследовательнось от а до конца

В питоне тоже возможны записи x[:], x[:b], x[a:], что означает слайс по всему списку, от начала до b, и от a до конца соответственно.

Пользователь может определить такие опреаторы для своего класса.

А как дела с полиморфизмом у (subseq x a b) в Лиспе?

> Это всё простые вещи, их трудно сделать как лучше так и хуже. Видиш, в лиспе есть их полные аналоги. Разница в том, что, как мы убедились на примере перестановок, эти далеко не всегда нужны и их применение - оптимальный способ.

На данном примере я не увидел никакого преимущества Лиспа над Питоном.

Как нибудь надо будет асилить Common Lisp, пока что я могу написать Hello World на Схеме. :-)

А по поводу sqrt, что тебе не нравится. Есть пакет cmath работающий с комплексными числами, есть пакет math работающий с действительными числами. Имхо правильно, я думаю что в большинстве случаев люди хотят чтобы sqrt(-1) вызывал исключение, а не возвращал j. Хочешь j импортируй cmath

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

> А как дела с полиморфизмом у (subseq x a b) в Лиспе?

это как?

> На данном примере я не увидел никакого преимущества Лиспа над Питоном.

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

> я думаю что в большинстве случаев люди хотят чтобы sqrt(-1) вызывал исключение, а не возвращал j

странное мягко говоря желание, ну да ладно.

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

>> я думаю что в большинстве случаев люди хотят чтобы sqrt(-1) вызывал исключение, а не возвращал j

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

Нормальное желание. То, что sqrt бросает исключение на -1, позволяет отлавливать ошибки в вычислительном коде, который работает с действительными числами. Хочешь комплексных - cmath.

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

Если алгоритм принципиально требует вещественных, ашыпка позже выскочит всё равно, а если нет - зачем лишние грабли?

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

> Если алгоритм принципиально требует вещественных, ашыпка позже выскочит всё равно

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

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

> Если уж знаеш чем он так плох, говори.

Не спорю, очень хороший язык Лисп. Легок в освоении -- я лично осваивал его три раза ;-).

Однако, как программиста-практика интересует вот одна хрень. Даже две. Не, три. Ну в общем, как там насчет биндингов, ну, хотя бы к GTK? Или, хотя бы Qt, если кому по вкусу. Хотя я боюсь, что если скрестить Лисп и С++, то получится смесь почище гремучей. Возможно, как вопрос номер раз с половиной -- как там насчет биндингов к MySQL (PostgreSQL, SQLite, Oracle, MSSQL по вкусу)?

Ладно, в более общем виде: как оно ничего оптимизировать Лисп-программу за счет реализации отдельных особо тормознутых участков на С/С++/Фортране? Можно считать это вопросом номер два, хотя он всего лишь развивает вопрос номер раз: как оно ничего, не факториал высчитать, а системку из 10000 (диф)уравнений решить? Хватит мощи? Ну а если матрицы аналогичного размера перемножить? Как оно? А ежели задача еще хорошо распараллеливается? Есть какой-нибудь аналог ПарСи или ПарФора, какой-нибудь ПарЛисп? Или чистых теоретиков такой инструмент не интересует?

Ну а вопрос номер три меня, как практикующего программиста, особенно интересует: для Апача уже сделали Лисп-модуль? Или, как все настоящие мущины, исключительно через CGI? И много ли сайтов слабали на таком Лиспе?

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

Если корень от отрицательного числа берётся неправомерно, очевидно что ашыпка произошла намного раньше, чем взятие корня. Поэтому, ексепшн в таком случае по-любому малоинформативен. Проще либо проверять данные на валиднось либо уж отлаживать с самово начяла, получив комплексное там, где ево не должно быть. При желании, можно нащёлать строчку кода, переопределив sqrt так, чёбы он генерил еррор при комплексном результате. И это будет проще и при обучении и при кодинге, чем иметь два набора дублирующих друг друга функций.

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

> Однако, как программиста-практика интересует вот одна хрень. Даже две. Не, три. Ну в общем, как там насчет биндингов, ну, хотя бы к GTK? Или, хотя бы Qt, если кому по вкусу.

http://www.cliki.net/Graphics%20Toolkit

> скрестить Лисп и С++

Зачем, если даже ооп в лиспе реализовано намного луче?

> Возможно, как вопрос номер раз с половиной -- как там насчет биндингов к MySQL (PostgreSQL, SQLite, Oracle, MSSQL по вкусу)?

http://www.cliki.net/database

> Ладно, в более общем виде: как оно ничего оптимизировать Лисп-программу за счет реализации отдельных особо тормознутых участков на С/С++/Фортране?

Обычно этим только можно замедлить, а для редких случяев когда оно нужно, есь http://www.cliki.net/compatibility%20layers

> как оно ничего, не факториал высчитать, а

http://www.cliki.net/Distributed

> для Апача уже сделали Лисп-модуль?

http://www.cliki.net/web

Посмотри UCW, и ты не захотиш модуль апачя

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

> очевидно что ашыпка произошла намного раньше, чем взятие корня.

Во-первых, не очевидно. Во-вторых, это ближайшая к ошибке точка (из известных). В-третьих, не будь максималистом - пусть решение работает не в 100% случаев, оно всё равно _облегчает_ жизнь.

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

> Зачем, если даже ооп в лиспе реализовано намного луче?

Речь не идет об "луче". Речь идет о "быстрее". А в данном случае -- так вообще намек на попытку скрестить "ужа" с "ежом" в виде Lisp/Qt.

За ссылки спасибо. Рад видеть, что прогресс на месте не стоит :-).

Раз уж зашла такая речь, может еще подскажете стандартные аналоги Lex/Yacc для Lisp? Я понимаю, что налабать свой собственный транслятор с нуля на Lisp -- самое оно для "настоящих мущин". Но хотелось бы без особого геморроя и, по возможности, в рамках известной технологии.

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

совершенно очевидно. Иначе откуда взялось отрицательное там, где не должно быть. Насчёт ближайшей точки, верно. Но как я указал, для таких редких случяев проще переопределить sqrt чем париться с кучей дубликатов. Как оно может облегчить? Ну, вобщем, вопрос конечно спорный, в окамле например даже арифметические операторы для вещественных и для целых разные. ИМХО не очень удобно, хотя наверное немного надёжнее. Окупает ли такое неудобство такой скудный прирост к надёжности - пёс ево знает, ИМХО нет.

Давай луче rationalize обсуждать?

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

> Речь не идет об "луче". Речь идет о "быстрее".

Быстрее всево конешно самолётом.

> А в данном случае -- так вообще намек на попытку скрестить "ужа" с "ежом" в виде Lisp/Qt.

А то, что tomcat запущен на линуксе, у которого ядро на сях - это попытка скрестить жабу с сями, чтоли?

> За ссылки спасибо. Рад видеть, что прогресс на месте не стоит :-).

Наздоровье. Пока не стоит. Вопрос лиш в том, в правильном ли направлении движецо.

> Раз уж зашла такая речь, может еще подскажете стандартные аналоги Lex/Yacc для Lisp?

ИМХО никаких шансов, потому что метапрограммирование в лиспе достаточно развито, чтобы не нуждаться в костылях, таких же какие юзаются в наречиях, этого лишённых. Однако пошарся здесь http://www.cliki.net/index , мож и найдёш подходящее ибо я достоверно не ведаю.

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

> хотелось бы без особого геморроя и, по возможности, в рамках известной технологии.

Так тебе работать, или обязательно на Лиспе? Если первое - то тебе в Питон.

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

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

[1]> (rationalize PI)
8717442233/2774848045
[2]> (setq z (+ 1 (rationalize PI)))
11492290278/2774848045
[3]> (setq z (* 3 z))
34476870834/2774848045
[4]> (float z)
12.424778
[5]> 

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

> Неужели в твоём представлении работа обязательно должна быть связана с немеряным гемором?

Насчет геморроя сказал не я, работа же должна доставлять удовольствие. А в том ответе я имел в виду, что все нужные тому человеку средства есть в Питоне, причем с бОльшим выбором, чем в Лиспе, более "вылизанные", более активно _используемые_, поддерживаемые и развиваемые.

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

> причем с бОльшим выбором, чем в Лиспе, более "вылизанные", более активно _используемые_, поддерживаемые и развиваемые.

Например?

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

Э, нет. Примеры широкого использования Web-фремворков, привязок к GUI, интерфейсов к БД, сделанных на Лиспе - в студию!

У меня на машине (FC4) программ на Лиспе - только Emacs. Программ и библиотек, требующих Python - 51. Из них специально я поставил 2 - python-numeric и matplotlib, всё остальное - по умолчанию. ИМХО, это говорит о том, что Лиспом пользуется куда меньше людей, чем Питоном -> отсюда менее вылизанные, поддерживаемые и развиваемые инструменты. Потому что это всё напрямую зависит от количества пользователей.

Сейчас почти в каждой серьезной библиотеке есть привязка к Питон, но я не помню ни одной с привязками к Лисп. Признай - Лиспом пользуется _намного_ меньше народа.

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

> представление чисел в рациональном виде, как целочисленное дробь

А нафига это надо?

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

>> причем с бОльшим выбором, чем в Лиспе, более "вылизанные", более активно _используемые_, поддерживаемые и развиваемые.

>Например?

GUI: wxPython, PyQt, PyGtk

WEB: Django, Pylons, Turbogears, Zope

DB: DB-API, SQLAlchemy, SQLObject

Scientific: Numeric, Scipy, NumPy, matplotlib(лучшая диба в своём классе вообще, для любых языков), интеграция с MatLab

Кстати, Фортран, всё таки быстрее Лиспа будет, без вопросов.

Middleware: Corba, ICE, Pyro

Интеграция с С/C++: SWIG, Pyrex, Boost::Python, ctypes

XML: ElementTree и много чего ещё

Что из этого есть в Лиспе?

Да и вообще в Питоне есть модули на все случаи жизни. Когда мне что-то надо я даже не задумываюсь есть такой модуль или нет, я _знаю_ что он есть, его осталось только найти :-)

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

Кстати, все эти либы работают под Линукс и Win32, или вообще везде где есть Питон, т.е. практически везде. Как дела с этим у Лиспа?

Имхо, Лисп это круто (tm), программа это данные и всё такое, но за пределами иподрома для сферических коней рулит Питон.

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

> У меня на машине (FC4) программ на Лиспе - только Emacs.

У меня еще Максима. Ну и отдельно стоит CL, оставшийся с весны, когда знакомому студенту нужно было лабы потестировать.

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

> Так тебе работать, или обязательно на Лиспе?

Мне для сравнения.

> Если первое - то тебе в Питон.

В Питоне, кстати, тоже не видел. Но знаю, что есть. Просто пока пользуюсь более привычным и строгим Эйфелем. Впрочем, не исключаю, что когда-нибудь перепишу на Питоне. Just for fun :-).

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

> А то, что tomcat запущен на линуксе, у которого ядро на сях - это попытка скрестить жабу с сями, чтоли?

Вы правильно поняли ход моей мысли :-).

> ИМХО никаких шансов, потому что метапрограммирование в лиспе достаточно развито, чтобы не нуждаться в костылях, таких же какие юзаются в наречиях, этого лишённых.

Я это знаю. Однако, есть вот хорошая lex/yacc-грамматика для SQL не мною и до меня. Не, ну понятно, для своих целей подрихтовать чуть-чуть нужно. Однако, только ради чистоты идеи заново собирать аналогичный лисапет -- это уже почти декаданс какой-то.

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

> широкого использования Web-фремворков, привязок к GUI, интерфейсов к БД, сделанных на Лиспе

Там я чюток повыше ссылу на cliki.net/web давал

> У меня на машине (FC4) программ на Лиспе - только Emacs.

А у намнозе большей кучи народу венда с висуалвасиком

> менее вылизанные, поддерживаемые и развиваемые инструменты

которые даже оперативы ослободить не могут? По меньшей мере бугога. Некоторое на лиспе полностью отладили лет 5 или 10 тому.

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

> WEB: Django, Pylons, Turbogears, Zope

они до ucw когда ещё дорастут?

> DB: DB-API, SQLAlchemy, SQLObject

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

> Что из этого есть в Лиспе?

Я там выше приводил ссылы на cliki.net. Полистай, увидиш чё там намнозе больше всево, а качество _на_порядки_ выше. Причём пользоваться намного проще.

> Кстати, Фортран, всё таки быстрее Лиспа будет, без вопросов.

Ну будет. А лисп быстрее питона, причём в разы.

> Да и вообще в Питоне есть модули на все случаи жизни. Когда мне что-то надо я даже не задумываюсь есть такой модуль или нет, я _знаю_ что он есть, его осталось только найти

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

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

> только ради чистоты идеи заново собирать аналогичный лисапет

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

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

> Заново переписывать конешно смысла нету, ранше надо было думать.

Ну, я тоже так подумал: вот если бы прожить жизнь сначала... Даже сказка такая была. Вот интересно, если бы и в самом деле начали делать IT с нуля, так SQL тоже бы не понадобился? Или его таки Лиспом не заменить?

И еще, простите уж новичка. Разворачивать весь фреймворк и колупаться небольшая охота. Если уж нашли биндинг к GTK, можно показать, в сколько строк пишется на Лиспе классический Hello в оконном варианте? Или, чтобы не отклоняться от темы, такая вот приблуда: окно, в окне строка ввода и справа кнопка "Вычислить", под строкой с кнопкой текстовый редактор. Когда в строке вводишь Лисп-выражение и нажимаешь кнопку "Вычислить", в редакторе появляются результаты вычисления.

Не, ну я понимаю, что это извращение то еще, ибо emacs рулит. Но все же, в учебных целях. А то ведь целый сервер не поленились написать, неужели такую ерунду не напишете?

Кстати, кто-нибудь знает, есть ли в emacs фильтры на текст a-la vim: выделаяем фрагмент, вызываем некую команду, в минибуфере вводим строку внешнего фильтра, подтверждаем, после чего выделенный фрагмент заменяется результатом фильтрации?

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

>> Так тебе работать, или обязательно на Лиспе?

>Мне для сравнения.

Если сравнивать по номенклатуре - в Лиспе есть всё (только кажется мне, что это пишется и используется только узким кругом лиц, со всеми вытекающими).

> Просто пока пользуюсь более привычным и строгим Эйфелем.

Неужели на нем пишут реальные программы? Какой компилятор? IDE?

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

>> широкого использования Web-фремворков, привязок к GUI, интерфейсов к БД, сделанных на Лиспе

> Там я чюток повыше ссылу на cliki.net/web давал

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

>> У меня на машине (FC4) программ на Лиспе - только Emacs.

>А у намнозе большей кучи народу венда с висуалвасиком

Ну, это аргумент уровня "миллионы мух". Причем здесь VB? Закрытая реализация кривого языка на закрытой платформе, которую я не использую (ты, я так понимаю, тоже).

>> менее вылизанные, поддерживаемые и развиваемые инструменты

>которые даже оперативы ослободить не могут?

Если ты и в самом деле всё еще считаешь, что то поведение Питона - это "оперативы ослободить не могут", то я не стану пытаться тебя переубеждать снова.

> на лиспе полностью отладили лет 5 или 10 тому.

Сборку мусора на Лиспе отладили всего 10 лет как? По-моему, это у 20-30 лет работает. Если не 40.

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

>> Просто пока пользуюсь более привычным и строгим Эйфелем.

> Неужели на нем пишут реальные программы?

Ну, я немного пишу. Знаю, что во Франции его очень любят в оборонке -- он у них там заменяет американскую Аду. Как я понял, в основном, из соображений патриотизма. Ну и безопасности, конечно же. :-)

> Какой компилятор?

Ну лично я пользую GNU SmartEiffel (точнее, его предка -- SmallEiffel). Есть и коммерческие компайлеры, в мейнстриме что-то типа ISE Eiffel. Но неинтересно.

> IDE?

GNU Emacs ;-). В демоверсии лет десять назад видел ISE Eiffel, еще под Windows 3.11. Неплохо сделан, но тоже не вдохновил :-).

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

> Ты отвечаешь не на тот вопрос, который я задал. Меня не список инструментов интересует, а то, насколько широко их используют.

Позвольте сформулировать более конкретно: где в России можно найти сравнительно дешевый хостинг с возможностями mod_lisp или чего-то аналогичного?

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

>> Неужели на нем пишут реальные программы?

> Ну, я немного пишу.

"Для себя" или на заказ?

> Знаю, что во Франции его очень любят в оборонке -- он у них там заменяет американскую Аду. Как я понял, в основном, из соображений патриотизма.

Я с обоими языками знаком только теоретически, но Эйфель мне понравился куда больше.

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

> "Для себя" или на заказ?

Для себя. Точнее, собираюсь после доводки выбросить это в OpenSource. Просто пока времени не хватает довести до ума. Пять лет назад писал "на заказ", но это было прототипирование: сугубо research, и моя инициатива. После того, как был достигнут proof-of-concept, начальство приказало переписать все на "правильном" C++. Причины те же, что уже тут обсуждались. И вот, в процессе переписывания все застряло в районе GC. А потом я уволился.

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

> в сколько строк пишется на Лиспе классический Hello в оконном варианте?

В одну можно уложиться при желании

> А то ведь целый сервер не поленились написать

Дык он мне для работы нужен был, вот и понаписал. Сдесь запостил потому гпл.

> неужели такую ерунду не напишете?

Почему бы и не размять кловеатуру?

#-:gtk (use-package :gtk)
(clg-init)

(defun calc (entry buffer)
    (text-buffer-insert-at-cursor
        buffer
        (write-to-string (eval (read-from-string (entry-text entry))))))

(let* (
    (entry (make-instance 'entry))
    (edi (make-instance 'text-view :border-width 5 :visible t :wrap-mode :word))
    (button (make-instance
        'button
        :label "do it"
        :signal (list 'clicked #'(lambda () (calc entry (text-view-buffer edi)))))))
    (make-instance
        'window
        :title "Hyu"
        :border-width 5
        :width-request 640
        :height-request 480
        :visible t
        :show-children t
        :child (make-instance
            'v-box
            :homogenous nil
            :child (list (make-instance 'h-box
                :child entry
                :child (list button :expand nil)) :expand nil)
            :child (make-instance
                'scrolled-window
                :hscrollbar-policy :automatic
                :vscrollbar-policy :automatic
                :child edi))
        :signal (list
            'delete-event
            #'(lambda (event)
            (declare (ignore event))
            (quit)))))

Это clg2 юзает.

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

> в Лиспе есть всё

На самом деле там есь гораздо больше. Но не в этом суть. Ещё раз повторюсь, лисп - более высокоуровневый чем бейсик/питон/и тем более С, посему сравнивать, что там есть внутре - занятие бессмысленное, мощь лиспа не только и не столько в библиотеках, встроеных функциях и операторах, а в грамотной конструкции самого языка.

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

> Меня не список инструментов интересует, а то, насколько широко их используют.

Какого лиха ты думаеш я знаю это? Я всево-навсево глюкодел а не социологическое бюро. Ну, предполагаю что меньше чем висуалвасик, а достоверно всё одно никто не ведает.

> я не стану пытаться тебя переубеждать снова.

ИМХО всёодно не сможеш, даже и не пытайся.

> Сборку мусора на Лиспе отладили всего 10 лет как? По-моему, это у 20-30 лет работает. Если не 40.

Помойку, да, отладили. Но как я понял ты не только про помойку говориш?

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

>> в Лиспе есть всё

> На самом деле там есь гораздо больше.

Больше, чем все? 8-O

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

А можно поинтересоваться: Лисп -- это единственный грамотно сконструированный язык?

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

> Почему бы и не размять кловеатуру?

Спасибки огромное! На досуге посмотрю...

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

> Это clg2 юзает.

Если будет время и желание -- напишите на eugine dot kosenko at gmail dot com. Хочется получить консультацию по библиотеке. А то clisp в gentoo нашелся, а вот с биндингом не сложилось. То есть, я даже не понял, о каком clg из заявленных идет речь :-(.

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

>И еще, простите уж новичка. Разворачивать весь фреймворк и колупаться
 небольшая охота. Если уж нашли биндинг к GTK, можно показать, в 
сколько строк пишется на Лиспе классический Hello в оконном варианте?


Вот примерчик для lambda-gtk. Рисуется окошко, там кнопочка Hello 
World. Нажимаешь на кнопочку -- в REPL появляется "Hello World". На 
закрывание окошка окошка -- в REPL пишется "bye!". В программе три 
обработчика событий.

(gtk:define-signal-handler bye1 :void (widget data)
  widget data  ; stop unused var compiler nagging
  (format t "bye!~%")
  (gtk:main-quit))

(gtk:define-signal-handler delev1 :int (widget event data)
  widget event data
  (format t "delete-event ocurred~%")
  gtk:+false+)

(gtk:define-signal-handler hellomsg :void (widget data)
  widget data
  (format t "Hello world!~%"))

(defun hello-world ()
  (gtk:init-ensure) ; make sure gtk is initialized before calling api
  (let ((window (gtk:window-new gtk:window-toplevel))
        (button (gtk:button-new-with-label "Hello World!")))
    (gtk:container-add window button)
    (gtk:container-set-border-width window 10)
    (gtk:widget-show button)
    (gtk:widget-show window)
    (g:signal-connect button "clicked" (g:callback hellomsg)
                      (g:nullptr))
    (g:signal-connect window "delete-event" (g:callback delev1)
                      (g:nullptr))
    (g:signal-connect window "destroy" (g:callback bye1)
                      (g:nullptr))
    (gtk:main)))

Если не нравится 1:1 стиль порта lambda-gtk, то какой-то товарищ 
сделал биндинг lambda-gtk к объектно-ориентированному CLOS.
Для работы lambda-gtk нужет CFFI. Не знаю, как там дело обстоит с
UFFI. Если будет, то пойдет на реализациях Common Lisp, которые 
обладают UFFI. Сейчас у меня это работает на SBCL.

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

А вот простой хрестоматийный примерчик для LTK -- биндинга к Tk.
Рисуется окошко, в нем кнопочка "Press Me". Нажимаешь ее -- в REPL 
печатается "Hello World"

(defun hello-1()
  (with-ltk ()
   (let ((b (make-instance 'button
                           :master nil
                           :text "Press Me"
                           :command (lambda ()
                                      (format t "Hello World!~&")))))
     (pack b))))

LTK отличное средство для быстрого создания интерфейсов. мне очень 
нравится, насмотря на то, что многие не любят, как выглядит Tk (хотя
эта ситуация, наверное, скоро изменится. Некоторые же видели скрин с
патченым tk8.5a. Да и переносимость отличная. Морда будет работать
и на маках, и на виндах, и в Linux.

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