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] taris_marh.livejournal.com 2009-12-11 11:24 am (UTC)(link)
Вот некоторое время назад пытался сподвигнуть того человека на вторую попытку - не сдвинул. Он вообще от программирования отошёл, а у меня на игровые концепты мозгов не хватает, максимум - мелкие данжены на пределе возможностей. Не так мозги работают.

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

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

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

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

[identity profile] potan.livejournal.com 2009-12-11 11:52 am (UTC)(link)
SISAL для MPI писал [livejournal.com profile] lispnik как курсовую. Не знаю, довел ли до ума.
На K написана СУБД, которая поддерживает кластера. Правда не MPI, а свой протокол.

[identity profile] volodymir-k.livejournal.com 2009-12-11 11:54 am (UTC)(link)
> Проект с треском провалился.

Казалось бы, не работает -- похоронить и забыть. Пробовали много раз, разные люди. Не работает. Нет, "возрождают".

[identity profile] fau74.livejournal.com 2009-12-11 12:03 pm (UTC)(link)
Dragons Age, ныне модный.
Там каждому неписю в команде можно повесить tactical clause - при наступлении таких-то ситуаций выполнять такие-то действия. Действия от самых грубых ("напасть", "встать в оборону") до, например, "зайти со спины и атаковать" или "догнать и перехватить атакующего на себя". Ситуации тоже разнообразны. В результате можно запрограммировать что-нибудь интересное.

Что интересно - количество таких clauses можно нарабатывать с экспой и со специализациями, в результате персонаж с опытом "умнеет".

[identity profile] permea-kra.livejournal.com 2009-12-11 12:39 pm (UTC)(link)
term rewriting == переписыватели выражений. prolog внутри себя, как я понял из вики, делает именно это . Т. е. Pure вываливает свои потроха наружу. Плюс мне попадалась пара статей, где на term rewriting перекладывали type theory. Ну и выглядит он не столь негуманоидно, как лиспы, хаскелы и прологи. Поэтому, кмк, весчь интересная...

[identity profile] permea-kra.livejournal.com 2009-12-11 12:41 pm (UTC)(link)
труЪ. Именно поэтому я тут ссылку на pure привёл.

[identity profile] vit-r.livejournal.com 2009-12-11 12:45 pm (UTC)(link)
XSLT - убогий наследник Лиспа.

[identity profile] afa-at-work.livejournal.com 2009-12-11 01:23 pm (UTC)(link)
вот интересно, кста.
а рубишный rake куда среди мэйков отнесен будет?

[identity profile] antilamer.livejournal.com 2009-12-11 02:25 pm (UTC)(link)
Чтобы сам - никак. Пролог это не магический теоремпрувер. Программы на прологе можно выполнять вручную, с ручкой и бумажкой.

Это язык с четкой моделью выполнения, которая оказывается удобнее других для ручного программирования многих (как утверждается) задач поиска.

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

[identity profile] nealar.livejournal.com 2009-12-11 02:35 pm (UTC)(link)
Будешь смеяться, но классическую "рыбу" я писал на хаскеле как набор фильтров над бесконечным списком вариантов. Каждый фильтр - ограничение. Получилось примерно столько же букаф, как если запрограммировать на логическом Curry и решало столько же времени. И однаково падало при неправильном порядке ограничений.
То есть, автоматический перебор с возвратом иногда получается за бесплатно.

[identity profile] nealar.livejournal.com 2009-12-11 03:18 pm (UTC)(link)
google: Munster Curry compiler (http://www.informatik.uni-kiel.de/~curry/implementations.html)
abbra: (Default)

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

[identity profile] beldmit.livejournal.com 2009-12-11 05:57 pm (UTC)(link)
О! Я это тогда не просек...

[identity profile] the-realistic.livejournal.com 2009-12-11 10:29 pm (UTC)(link)
В Windows NT версии до 4ой на Прологе была написана та часть control panel, что строила реестр для сетевых компонент.

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

В 4рке вместо Пролога сделали скриптовый язык INF файлов, они были _императивные_, и да, отдаленно смахивали на Питон.

В w2k все это выбросили, и вместо этого сделали декларативный язык INF файлов (PnPшных, по некоей концептуальной сути оно похоже на make), с возможностью воткнуть куда не попадя еще и специфичные для компонента, написанные в машинном коде, coinstaller и notify object DLLs. В первом грубейшем приближении - сначала все делается на основе INF файлов, потом этот первый результат предъявляется nofify objectам, что вносят в него правки.

Это и по сей день так.

[identity profile] zerthurd.livejournal.com 2009-12-12 08:17 am (UTC)(link)
Так оно в общем случае и есть. Просто в разных языках делается упор на разные парадигмы, в зависимости от уклона и синтаксис создаётся, и рантайм. Но можно и на пхп писать в ФП, и на хацкеле писать в императивном стиле.

[identity profile] dottedmag.livejournal.com 2009-12-12 08:26 am (UTC)(link)
Ну так Непейводу все слушали и читали, ага.

Re: Colobot

[identity profile] kostix.myopenid.com (from livejournal.com) 2009-12-12 02:25 pm (UTC)(link)
Colobot — не очень хороший пример: он программируется слишком императивно. То есть учить детей императивному программированию можно, но вряд ли можно логическому.

И вообще это не только с ней проблема такая. Как я понимаю, и MindRover, и TORCS, и все эти "стотыщпицот" различных "войн роботов", подразумевают императивное программирование.

[identity profile] kostix.myopenid.com (from livejournal.com) 2009-12-12 02:27 pm (UTC)(link)
Что-то такое появилось по-моему ещё в бородатых текстовых MUD'ах: можно было задавать реакцию протагониста на различные события в игре.

Page 3 of 3