vitus_wagner: My photo 2005 (Default)
vitus_wagner ([personal profile] vitus_wagner) wrote2009-12-11 12:00 pm

Возрождение логического программирования

Когда-то давно японцы с большой помпой организовали проект "компьютеров 5-го поколения". С упором на логическую парадигму, в частности язык Prolog. Проект с треском провалился.

В начале 90-х использованрие Prolog воспринималось скорее как курьез, хотя по крайней мере одну геоинформационную систему в нашей лаборатории в Почвенном институте (еще до моего прихода туда) на Turbo Prolog написали.

Потом почти 20 лет в тех областях IT, с которыми мне приходилось иметь дело, единственным реально используемым языком логического программирования был make.

А вот сегодня [livejournal.com profile] abbra пишет об использовании Prolog в системе управления энергопотреблением Nokia N900.
Я злобно ругаюсь у него в комментариях. Почему? Да точно так же я бы ругался если бы кто-то сегодня использовал Fortran IV для решения задачи которую стоит решать в каком-нибудь Matlab или использования gw-basic там, где под рукой есть интерпретатор Python.

Другое дело, что предложить инструмент логического программирования эквивалентный по зрелости Python или Matlab я, пожалуй, не возьмусь. Если проводить параллель между Prolog и Fortran (хотя может быть, разумее сравнивать Prolog с basic - уж больно до хрена диалектов и Turbo среда опять же существовала), то make - это аналог bourne shell. Причем даже gnu make - ни разу не bash, а в лучшем случае dash. На bash/zsh тянут разве что bras и ему подобные make replacements.

А вот языков которые были бы в области логического программирования тем, чем являются современные продвинутые скриптовые языки (включая и нелюбимый мной php) в области императивного программирования - мне что-то неизвестно.

Но вообще тенденция возвращения логического программирования интересна. Да, конечно, мы потеряли 20 лет. Но теперь, пусть из-за внутренних потребностей вычислительной техники - управления её собственным энергопотреблением, возвращаются технологии, которые пригодны для управления объектами реального мира. Вспомним, что Шумил описывает управление киберами именно как логическое программирование.

[identity profile] potan.livejournal.com 2009-12-11 09:21 am (UTC)(link)
Prolog сегодня это не то же самое, что Prolog 20 лет назад. Он развивается.
Из интересных разработок в области ЛП отмечу Mercury и Curry. Первый очень эффективен, хоть и поддержка ЛП ограничена. Curry очень красив (синтаксис и многие фичи взяты из Haskell), но как-то вяло развивается.
Но сейчас более интересно обобщение ЛП - программирование в ограничениях.
wizzard: (Default)

[personal profile] wizzard 2009-12-11 09:28 am (UTC)(link)
>> php от ЛП

Да, эт надо бы. Обкатка технологии на массах - это полезно.

[identity profile] potan.livejournal.com 2009-12-11 09:33 am (UTC)(link)
Боюсь, Curry повторит судьбу Clean. Mercury, все-таки практичнее. И предсказуемее (за счет отказа от некоторых возможностей).

А серьезных ляпов в дизайне Prologа, которые давали бы повод сравнивать его с Fortranом, я не вижу. Кое-чего (например предикатов высших порядков) так не хватает, но в остальном - приличный язык.
По моему, хорошо подходит для обучения. Я, правда, дочку научить не смог - но мне вообще педагогических способностей не хватает.

[identity profile] potan.livejournal.com 2009-12-11 09:46 am (UTC)(link)
Так в Prolog-е и на современный взгляд ляпов нет. Ни чему плохому оно не научит. В отличие от Logo с dynamic scope.
А мотивация для Prolog-а есть. На нем удобно и красиво логические задачки решать. Мы с дочкой числовые ребусы решали - за одно и умножение слолбиком повторили.

(no subject)

[identity profile] permea-kra.livejournal.com - 2009-12-11 09:58 (UTC) - Expand

(no subject)

[identity profile] permea-kra.livejournal.com - 2009-12-11 10:02 (UTC) - Expand

(no subject)

[identity profile] taris_marh.livejournal.com - 2009-12-11 09:52 (UTC) - Expand

(no subject)

[identity profile] taris_marh.livejournal.com - 2009-12-11 10:11 (UTC) - Expand

(no subject)

[identity profile] taris_marh.livejournal.com - 2009-12-11 10:18 (UTC) - Expand

(no subject)

[identity profile] permea-kra.livejournal.com - 2009-12-11 09:54 (UTC) - Expand

(no subject)

[identity profile] taris_marh.livejournal.com - 2009-12-11 10:14 (UTC) - Expand

(no subject)

[identity profile] potan.livejournal.com - 2009-12-11 10:43 (UTC) - Expand

(no subject)

[identity profile] taris_marh.livejournal.com - 2009-12-11 11:24 (UTC) - Expand

Re: Colobot

[identity profile] kostix.myopenid.com - 2009-12-12 14:25 (UTC) - Expand

(no subject)

[identity profile] fau74.livejournal.com - 2009-12-11 12:03 (UTC) - Expand

(no subject)

[identity profile] kostix.myopenid.com - 2009-12-12 14:27 (UTC) - Expand

[identity profile] http://users.livejournal.com/__const__/ 2009-12-11 09:52 am (UTC)(link)
А Fortran 2003 не то же самое, что Fortran 90.
Извиняюсь, но что-то матлаб за альтернативу не держу. Особливо с учётом несвободности оного.
А более и считать-то нечем.

[identity profile] potan.livejournal.com 2009-12-11 11:00 am (UTC)(link)
K, J?

А вообще жалко что SISAL загнулся. Для расчетов он хорошо бы подошел.

(no subject)

[identity profile] potan.livejournal.com - 2009-12-11 11:52 (UTC) - Expand

[identity profile] potan.livejournal.com 2009-12-11 09:41 am (UTC)(link)
Прошу прощения, испугался что за спам примут :-).

(в качестве ракламы) А вообще близкие ссылка есть в юзеринфо [livejournal.com profile] ru_declarative.

[identity profile] nealar.livejournal.com 2009-12-11 02:28 pm (UTC)(link)
Кроме PAKCS есть ещё mcc.

(no subject)

[identity profile] nealar.livejournal.com - 2009-12-11 15:18 (UTC) - Expand

[identity profile] avryabov.livejournal.com 2009-12-11 10:06 am (UTC)(link)
Серьезно? лет 15 назад я делал на прологе одну программу.
Тогда столкнулся с эффектом недостаточной производительности.
то бишь простенькую задачу пролог тянул, но такие простенькие я и в уме быстро решал.
а там где перебор был по-больше, то пролог просто "зависал", и для получения ответа пришлось переписать всю логику на C, который, как раз вполне справился.
После чего мои эксперементы с прологом закончились.

[identity profile] avryabov.livejournal.com 2009-12-11 10:34 am (UTC)(link)
Однако механизмы полного перебора уж слишком быстро увеличивают своё время работы.
Тут никакого процессора не хватит.
Проще четко прописать алгоритм "как считать".
Хотя, если действительно прогресс есть и машина сама может построить оптимизированый алгоритм - то тогда дело другое.

(no subject)

[identity profile] permea-kra.livejournal.com - 2009-12-11 12:41 (UTC) - Expand
abbra: (Default)

[personal profile] abbra 2009-12-11 03:24 pm (UTC)(link)
Пролог работает только в точке, где надо решение принять. Это, как правило, смена пользователем активного приложения или запуск нового. Реклассификация после принятия решения сделана на C. В целом, съедается менее трети процента, а чаще всего классификатор и модуль принятия решений спят. Они реагируют на exec()/fork() и некоторые другие действия.

[identity profile] potan.livejournal.com 2009-12-11 10:37 am (UTC)(link)
В декларативных языках часто трудно предсказать производительность. Часто интуитивно-понятная реализация тормозит. Получить код, сопостовимый по производительности с C можно, но он получается едва ли не сложнее императивного :-(.
В Mercury запретили многие фичи, которые снижают производительность. На нем можно писать очень эффективно.

[identity profile] avryabov.livejournal.com 2009-12-11 11:48 am (UTC)(link)
Получить код, сопостовимый по производительности с C можно, но он получается едва ли не сложнее императивного :-(.
Угу.
Что-то такое и вспоминается.

В Mercury запретили многие фичи, которые снижают производительность. На нем можно писать очень эффективно.
Будем знать.

[identity profile] slobin.livejournal.com 2009-12-11 10:17 am (UTC)(link)
Но сейчас более интересно обобщение ЛП - программирование в ограничениях.

Угу. Тут кто-то (вспомнить бы кто...) явным образом предлагал Oz (ах, да, "ссылки давать"... в общем, Mozart/Oz) как современный Питон. Он принципиально, по построению, мультипарадигменный, и программирование в ограничениях среди прочих парадигм там тоже есть. Единственное "но": на традиционно питоновских (перловых etc...) задачах -- обработке строк -- он тормознооой. Впрочем, Эрланг этим тоже отличается, и ничего, используют помаленьку. Да, кстати, весь Эрланг внутри Оз тоже есть. Разве что насчёт подмены модулей на лету не уверен, и то, кажется, видел в примерах реализацию.

... Если я правильно ошибаюсь ...

[identity profile] potan.livejournal.com 2009-12-11 10:31 am (UTC)(link)
Erlang внутри Oz в каком-то смысле есть, но он там слишком уж не realtime. В Erlang очередь собщений привязана к нити и это учитывается планировщиком. В Oz же приходится за заполненностью очередей следить самому и механизмы для этого применяются нетривиальные.

А для серьезной обработки строк (например в биоинформатике) интересно приспособить Рефал. Кстати, тоже во многом логический ;-).

(no subject)

[identity profile] dottedmag.livejournal.com - 2009-12-12 08:26 (UTC) - Expand

[identity profile] slobin.livejournal.com 2009-12-11 11:15 am (UTC)(link)
Я как раз о несерьёзной обработке строк. Совершенно не уверен, что алгоритмы, хорошо обрабатывающие гигабайтные цепочки символов (кстати, а Рефал это делает? я не в курсе), будут хороши и на килобайтных. А, чтобы стать современным php, язык должен для начала вытеснить сам php. (задумавшись) Хотя, похоже, Руби это потихоньку удаётся...

... Защита от дурака на дур не рассчитана ...

[identity profile] slobin.livejournal.com 2009-12-11 11:36 am (UTC)(link)
Вспомнил, кто это был: [livejournal.com profile] zhengxi. Он, правда, пишет в основном под замок, но и ты, и Витус у него во френдах. Вот тут про Mozart/Oz, а вот тут вообще про параллелизм (точнее, сначала про Go, но обсуждение ушло в параллелизм).

... Разве только вот воробьи ...