vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner
Когда-то давно японцы с большой помпой организовали проект "компьютеров 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 лет. Но теперь, пусть из-за внутренних потребностей вычислительной техники - управления её собственным энергопотреблением, возвращаются технологии, которые пригодны для управления объектами реального мира. Вспомним, что Шумил описывает управление киберами именно как логическое программирование.

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

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

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

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

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

(no subject)

From: [identity profile] potan.livejournal.com - Date: 2009-12-11 09:46 am (UTC) - Expand

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

Re: Colobot

From: [identity profile] kostix.myopenid.com - Date: 2009-12-12 02:25 pm (UTC) - Expand

(no subject)

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

(no subject)

From: [identity profile] kostix.myopenid.com - Date: 2009-12-12 02:27 pm (UTC) - Expand

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

(no subject)

From: [identity profile] b-al-u.livejournal.com - Date: 2009-12-11 10:08 am (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/__const__/ - Date: 2009-12-11 10:30 am (UTC) - Expand

(no subject)

From: [identity profile] potan.livejournal.com - Date: 2009-12-11 11:00 am (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/__const__/ - Date: 2009-12-11 11:03 am (UTC) - Expand

(no subject)

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

(no subject)

From: [identity profile] potan.livejournal.com - Date: 2009-12-11 09:41 am (UTC) - Expand

(no subject)

From: [identity profile] nealar.livejournal.com - Date: 2009-12-11 02:28 pm (UTC) - Expand

(no subject)

From: [identity profile] nealar.livejournal.com - Date: 2009-12-11 03:18 pm (UTC) - Expand

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

(no subject)

From: [identity profile] avryabov.livejournal.com - Date: 2009-12-11 10:34 am (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2009-12-11 12:41 pm (UTC) - Expand

(no subject)

From: [personal profile] abbra - Date: 2009-12-11 03:24 pm (UTC) - Expand

(no subject)

From: [identity profile] potan.livejournal.com - Date: 2009-12-11 10:37 am (UTC) - Expand

(no subject)

From: [identity profile] avryabov.livejournal.com - Date: 2009-12-11 11:48 am (UTC) - Expand

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

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

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

(no subject)

From: [identity profile] potan.livejournal.com - Date: 2009-12-11 10:31 am (UTC) - Expand

(no subject)

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

(no subject)

From: [identity profile] slobin.livejournal.com - Date: 2009-12-11 11:15 am (UTC) - Expand

(no subject)

From: [identity profile] slobin.livejournal.com - Date: 2009-12-11 11:36 am (UTC) - Expand

Date: 2009-12-11 09:29 am (UTC)
From: [identity profile] father-gorry.livejournal.com
К своему стыду, никогда не понимал разницы между парадигмами. Для меня любой язык выглядит как набор упрощающих задачу функций и средств инкапсуляции. А потом - нужна логика, значит пишем с упором на логику. Нужна работа со свойствами - сопоставляем свойства в таблицеподобном виде. И т.д.

Date: 2009-12-11 09:35 am (UTC)
From: [identity profile] potan.livejournal.com
Ну между отвертной и стамеской тоже разница небольшая :-).

(no subject)

From: [identity profile] father-gorry.livejournal.com - Date: 2009-12-11 10:26 am (UTC) - Expand

(no subject)

From: [identity profile] father-gorry.livejournal.com - Date: 2009-12-11 10:27 am (UTC) - Expand

Date: 2009-12-11 09:55 am (UTC)
eldhenn: (Default)
From: [personal profile] eldhenn
Ну пролог он *другой*. Я его в своё время не осилил, если честно - так и не понял, как ему описать ханойскую башню или волка, козу и капусту, чтобы он сам нашёл решение.

(no subject)

From: [identity profile] father-gorry.livejournal.com - Date: 2009-12-11 10:30 am (UTC) - Expand

(no subject)

From: [identity profile] antilamer.livejournal.com - Date: 2009-12-11 02:25 pm (UTC) - Expand

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

Date: 2009-12-11 09:41 am (UTC)
andrzejn: (Default)
From: [personal profile] andrzejn
Я крайне поверхностно знаком с логическим и функциональным программированиями, поэтому мне любопытно:

Можно ли кратко указать, какая существенная возможность Prolog отсутствует в современных функциональных языках - всех этих ML, Haskell, Clean, F#?...

Date: 2009-12-11 09:50 am (UTC)
From: [identity profile] potan.livejournal.com
Автоматический перебор с возвратом. Двунаправленные функции.
В классическом Prolog-е есть динамическое обноврение базы данных (assert) - это частично заменяет отсутствие макросов и сближает с динамическими языками.

(no subject)

From: [identity profile] nealar.livejournal.com - Date: 2009-12-11 02:35 pm (UTC) - Expand

Date: 2009-12-11 09:51 am (UTC)
From: [identity profile] permea-kra.livejournal.com
Витус, а посмотрите на языки, которые term rewriting. типа Pure.

Date: 2009-12-11 10:37 am (UTC)
From: [identity profile] slobin.livejournal.com
Часа два, наверное, смотрел. За это время вынес два соображения:
  1. Для начала можно вообще не думать о нём как о "языке", а думать как о замене bc. Как об ОЧЕНЬ мощном калькуляторе. Витус, помнишь задачку от Белявского про 9^9^9? Pure на ней всех порвал, как Тузик грелку. Собственно, насколько я понял, автор языка сам им пользуется, чтобы видео и звук обсчитывать. Ну то есть считают, естественно, библиотеки, а язык -- просто удобный к ним интерфейс.
  2. Семантика переписывания термов поначалу вводит в ступор при мелких ошибках. Например, если 3%6 вычислился обратно в 3%6 -- это потому что дробь не сокращается, или потому что я use math; сказать забыл? Пример нарочно тривиальный, но возможны и более реалистичные.

Но вообще да, интересная чем-то штука. Правда, совсем не Пролог. ;-) P.S. ссылка

... Я тут посчитал немного ...

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2009-12-11 12:39 pm (UTC) - Expand

(no subject)

From: [identity profile] beldmit.livejournal.com - Date: 2009-12-11 05:57 pm (UTC) - Expand

Date: 2009-12-11 10:05 am (UTC)
From: [identity profile] max630.livejournal.com
Вот я так и не понял, что такое это логическое программирование. Учебные примеры на prolog по тасованию родственников совершенно неубедительны, кроме того непонятно как это имплементироваить иначе как полным перебором вариантов.

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

Date: 2009-12-11 10:11 am (UTC)
From: [identity profile] migmit.vox.com (from livejournal.com)
Пролог - это такой один большой перебор с возвратом, и ничего больше.

Date: 2009-12-11 10:11 am (UTC)
From: [identity profile] dottedmag.livejournal.com
"непонятно как это имплементироваить иначе как полным перебором вариантов."

Ты быстро нащупал слабое место Prolog :)

Это backtracking с перебором. А чтобы перебор не вылиывался в экспоненту - в реализацию добавляются хаки / прагматы / форсирование порядка перебора.

(no subject)

From: [identity profile] max630.livejournal.com - Date: 2009-12-11 10:18 am (UTC) - Expand

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

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

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

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

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

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

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

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

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

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

May 2025

S M T W T F S
    1 2 3
4 56 7 8 9 10
11 12 131415 1617
1819202122 2324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 24th, 2025 09:50 am
Powered by Dreamwidth Studios