Как стать автором
Обновить

Комментарии 106

Незнаю кто но меня в свое время он точно убил.
На курсе Пролога помнится после ООП перестраиваться конечно очень сложно было. Мозг взрывался.
НЛО прилетело и опубликовало эту надпись здесь
У нас курс довольно разнообразный был. И lisp, и пролог и 1с захватили… Даже DSP пробовали. Привет ТРТУ :)
Привет из НПИ ;) Был семестр ФЛП с лиспом и прологом. Мне понравилось
У нас в ТулГУ в приложении к курсу «Экспертные Системы» тоже учили Prolog и даже лабы делали. А вот где реально мозг перестраивать надо — так это GPSS ;)
Было, было… Не к ночи он будет помянут :)
Когда у меня был курс GPSS — я тогда писал какое-то многопоточное приложение на работе. И все в голове уклалось как нужно: есть конвеер на который поступаю разные объекты и из них нужно было сделать нужную процукцию:) Ну а на языке GPSS уже это всё описать.
Кстати, никогда бы не подумал изучая GPSS, что может когда-то пригодится… Позднее автоматизировали производственный процесс и встала задача моделирования технологического пути прохождения деталей по станкам. Система обслуживающих аппаратов, транзакций и очередей «один в один» как в GPSS. Правда реализовали все это на Delphi, но работало на «ура».
Да уж :) У нас в институте был Пролог, да и GPSS тоже изучали. Слегка трудновато после многолетнего изучения С++ было понять язык логического программирования, но зато серьезно тренирует разум. И не прав тот, кто говорит, что в России нет высшего образования, оно есть ;)
аналогично. Меня наша преподавательница «похвалила», сказав что она первый раз видит, чтобы на прологе кто-то написал бы программу на Си (мой моск к тому моменту был уже необратимо поврежден).
Вспоминается, как молодой аспирант, смущаясь, пытался обьяснить нам, двум студенткам, сдающим лабу на Прологе, что «ну девочки, это не рекурсия, хотя… странно, это работает».
хвостовая рекурсия, ага ;) сейчас мне почти тридцать, я программист и бородат, и до сих пор чтобы уместить прологовские концепции в голове требуется применить некоторое ментальное усилие.
Помню у нас в библиотеке, на очень видном месте гордо стояла книга «Пролог — язык программирования будущего», года 90го выпуска.
Цитата из вики в статье о Prolog:
«Перспектива развития всемирной Сети, известной как проект Веб 3.0 поддерживает особый интерес к семантике распределенных данных и их обработке декларативными методами. В связи с этим появились концепции языка OWL, основанного на концепции First-Order Logic (FOL)[2], реализацию которой, в свою очередь, можно рассматривать как значительно более расширенную технику классического Prolog.»
так что вроде жив язык.
скорее оживает — параллельные вычисления, а с ними и логическое программирование, возвращается
потолок частотного ускорения слишком близок
OWL критикуют за излишнюю сложность, его лет пять назад на руках носили, говорили, что вот-вот OWL, RDF и прочие захватят мир. Не захватили.
В процессе захвата, посмотрите сайт bbc.co.uk — он вполне использует уже семантические фишки (дублин коре, запросы к dbpedia.org и прочее)
Просто RDF оказался неудобен, а вот RDFa в сочетании с HTML5 может оживить семантическую паутину.
Проблема RDF и прочего подобного исключительно психологическая: люди не хотят, не умеют и не будут заполнять метаданные. Что-то можно, конечно, вытащить автоматом, но это эмпирические данные, от них никакой семантики толком. Так что я не верю в светлое семантическое будущее.
Посмотрим, на самом деле здесь не только психологический барьер, а так же еще банальный — технический (сделать апдейт в графе не такая и простая задача, даже Oracle не сделал еще полную поддержку SPARQL, хотя сделал уже большой шаг к этому), практическое применение получить от семантической паутины не так и просто, для компаний это очень серьезный шаг.
Полагаю, нас просто с детства учили читать неструктурированный негипертекстовый текст. Поэтому и к метаданным такое отношение.

Вот когда учебник литературы будет содержать не тексты произведений, а семантические графы, тогда и к метаданным отношение другое будет.
И как он дублин коре использует? И что у DBPedia запрашивает? Можно поподробнее и с примерами?
В общем-то, вы можете просто посмотреть исходных код их страниц и увидеть метаданные.
Запросы к dbpedia они делают для получения данных в своих раздела, например, можете открыть раздел о животных (http://www.bbc.co.uk/nature/animals/) — там берутся энциклопедические данные, а в качестве контекста уже подаются их программы на эту тему.

Боюсь если я начну расписывать все это — будет очень много текста и не думаю что это совсем к месту.
Кстати, очень похоже что интересный пост получился бы :)
Вы забыли, что SQL с каждой новой версией семантически приближается к Prolog. Даже группа по развитию SQL, собираясь каждые 10 лет обязательно упоминает об этом.
жив, то жив но на последнем исдыхании. Хотя в ВУЗЕ где учусь, перваки изучают его немного.
Угу, у нас тоже изучают, курсе на втором, в одном предмете в Лиспом. А мне в свое время довелось и нечто вроде базы знаний на нем писать в курсовой. Не очень я его полюбила после этого.
я тоже было время курсовой на нем писал. давался вобщем кусок города. нужно было поставить две точки в этом куске город и программа должна была довести из одной точки до другой по кратчайшему маршруту описывая все улицы и дома по которым пролагается маршрут.
у меня метро было :)
Нам тоже пролог преподавали пару месяцев. Ничего оттуда не запомнил, в языке особо не разобрался. Разбираться сейчас в прологе никакого желания нет из-за того, что применять его все равно негде. Уж лучше бы лисп преподавали, функциональщина везде используется и на практике полезна.
> Разбираться сейчас в прологе никакого желания нет из-за того, что применять его все равно негде.

Зря вы так резко. Проблема не в языке, а в отсутствии раскрученных инструментов разработки. На прологе очень красивые системы бухучета могут получиться, например. Системы компьютерной алгебры, системы принятия решений, системы семантического поиска в Web 3.0
Могут, но не получаются. Вообще, декларативный ли, функциональный, асинхронный язык — не важно — без возможности написания на нём нормальных императивных программ они — бессмысленный пустой звук (тот же лисп — не вполне функциональный, в частности, благодаря макросам).
Хм, не уловил, а как макросы ломают функциональность? Лисп даëт возможность писать программы имеративно с помощью присваивания (setq, etc), а макросы тут не при чëм, или я что-то упускаю?
Насколько я понял, некоторые общеупотребимые лисперами макросы (loop, например) вкупе с кейвордами «лёгким движением руки» добавляют во вполне себе функциональный Лисп программирование в императивном стиле (точнее, они добавляют императивные DSL). Можно даже (о ужас) программировать в стиле tagbody/go.

Вместе с возможностью доступа в глобальную таблицу символов (насколько я понял, из любой части программы), в принципе, это делает Лисп таким же «функциональным», как Perl, Python или Javascript.
А, как-то я с этой стороны не посмотрел. Ну, возможность писать императивно не исключает возможность писать функционально. И это на лиспе всë-таки делать проще, чем на перле, питоне или жаваскрипте.
У Лиспа есть одно важное достоинство перед перечисленными: возможность программным образом обрабатывать исходные формы программы и писать эти самые макросы. А в остальном, «функциональность» в смысле возможности написания программ с подавлением возможных сайд-эффектов — такая же, как у перечисленных языков, просто вместо зоопарка скобочек и прочих лексических/синтаксических средств структурирования программ есть очень ограниченный набор правил.
классный язык
НЛО прилетело и опубликовало эту надпись здесь
у них есть множество приемников


У них есть множество преемников.

А «приёмники» — это которые с антеннами и батарейками.
тож верно :)
Мы тоже его изучали. И на вопросы о применении нам тупо отвечали:«ИИ и системы экспертной оценки». При этом никто из кафедры не смог привести пример ни одной реально работающей и востребованной ИС, написанной на прологе. ИМХО, пролог можно зарывать.
дело не в практике, дело в обучении логическому мышлению, думаю.
честно говоря, я так и не уловил различия в областях применения Пролога и Лиспа
хотя у меня были отдельные курсы по ним
и в том, и в другом определенный круг задач решается одинаково легко
Так ведь вся борьба между этими языками — борьба между технологиями Европы и Америки.

Пролог — Лисп
Паскаль — Си

И то что победили вторые не заслуга самих языков, а грамотный маркетинг, затем инерционность мышления пользователей (влом переучиваться) и в конце уже мегааргумент — библиотек и инструментов больше для Лисп и Си. Но по вначале мегааргумента не было, а был только маркетинг.
еще в тему «невидимой» борьбы (из нижних комментов)

Симула (Новегия 1967) — SmallTalk (США 1972)
был не прав, всё-таки Пролог изобрели в Европе
вы не поверите (в следующей статье есть об этом) — первые версии пролога были сделаны в Стэндфорде в лабораториях Роберта Ковальски, а вот ускорение и известность ему принесли уже Фурукава и проект пятого поколения
писал и работало… давно это было)
Вы в университете учились или ПТУ? Вас не должны интересовать реально работающие и востребованные применения технологий. Вас учат думать своей головой, а не статистикой, и самостоятельно принимать решения.
Судя по минусу, в наших университетах на самом деле не учат думать головой, а учат пользоваться популярными технологиями, не обращая внимания на их адекватность.
Дело в том что в наших универах не учат думать своей головой, а учат бесполезным устаревшим техногиям.
умение думать головой вырабатывается исключительно самостоятельно
универ может только помочь в этом
холиварная тема, на самом деле, чему и как учить в ВУЗе, даже на Хабре столько копий поломано :)
объектно-ориентированные (1972, SmallTalk);


Симула была раньше. В 1967
автор из штатов, а за их пределами развитого мира нет, как известно :)
кому какое дело, что там сказочной стране Норвегия в 67 изобрели
Симула не была чистым объектно-ориентированным языком.
Тогда уж впишите лисп везде — на нём впервые варианты систем на логических формулах и передаче сообщений делались.
С нетерпением жду продолжения.
к среде, думаю, переведу
тоже весьма занятная статья
сделал, хоть и позже
НЛО прилетело и опубликовало эту надпись здесь
Как по мне — так эта статья живее всех живых. Стиль почти идеальный, давненько не встречал на хабре подобное.
НЛО прилетело и опубликовало эту надпись здесь
Может быть, если бы была приличная реализация пролога, многие бы его применяли. Наверняка многие его используют, не зная об этом, и создавая свои версии — когда пишут микро-экспертные системы.
Проблема курицы и яйца.
Позвольте поворчать :)

Объектно-ориентированное программирование — это методика, ортогональная и императивному, и функциональному, и логическому программированию. ООП есть и в хаскеле и в прологе и в Си, при желании. А те, языки которые обычно называют объектно-ориентированными (Java/C++) являются в целом имеративными. И забыли про одну важную разновидность — программирование в ограничениях. Итого:

* императивные
* функциональные
* логические
* в ограничениях (constraint programming, развитие идей логического программирования)

И еще: Лисп имеет достаточно мало связи с функциональным программированием. Если в Scheme еще туда-сюда, то Commonn Lisp скорее императивный объектно-ориентированный с развитой системой метапрограммирования, чем функциональный.

хорошо поворчали :)
позволю себе ответить цитатой: Тем не менее, классификация запутанна и зачастую противоречит сама себе.
Для своего времени (и ещё лет 10-20 после) LISP был самым функциональным из имеющихся. Хотя чисто функциональных языков в этом семействе до сих пор нет.
НЛО прилетело и опубликовало эту надпись здесь
Согласен, пролог сам убил себя. Он был кандидатом на серебрянную пулю, а их не существует. Я думаю декларативное программирование вообще плохо преспособлено решать сугубо прикладные задачи. Уж слишком императивен этот мир. Кто хочет похоливарить на этот счет, пусть вначале напишет алгоритм бинарного поиска в массиве на Си, хаскеле, прологе — в любом из трех случаев придется писать программу «на Си». Но я не хочу сказать, что декларативному программированию вообще нету места в промышленной разработке, некоторые элементы очень полезны, например: составление списков, монада maybe, лямбды.
> Кто хочет похоливарить на этот счет, пусть вначале напишет алгоритм бинарного поиска в массиве на Си, хаскеле, прологе — в любом из трех случаев придется писать программу «на Си»

Зачем же писать и холиварить? До нас уже всё написали и доказали, что ваше мнение не верно.

rosettacode.org/wiki/Sorting_algorithms/Quicksort#C
rosettacode.org/wiki/Sorting_algorithms/Quicksort#Haskell
rosettacode.org/wiki/Sorting_algorithms/Quicksort#Prolog

Как говорится, найдите десять отличий. Даже немного смешно, что вы могли такое мнение высказать. Похоже, вам со школы внушали, что кроме императивной парадигмы ничего не существует.
Увы, я тоже свято верил во все это, когда учил хаскель :). Но все таки вы не правы. Я просил именно бинарный поиск, а не сортировку. И конечно же нормальную, эффективную (читай итеративную) реализацию без рекурсии, в крайнем случае на хвостовой рекурсии.

Что касается quicksort, то и на С++ можно написать такую же тормозную и компактную реализацию, как и на хаскеле или прологе.

> Похоже, вам со школы внушали, что кроме императивной парадигмы ничего не существует.

Ничего мне не внушали. Просто я побаловался с лиспом и хаскелем, а потом вырос и понял, что мне все эти костыли не нужны.
Бывает. Люди вон «вырастают» и понимают что им линукс даже серверах не нужен. Мало ли чего может с человеком произойти.
Бывает и такое, но это не про меня — у меня линукс на всех компьютерах :)
Позвольте уточнить. С каким именно лиспом вы знакомились в контексте декларативных языков? Просто ни одного современного декларативного языка этого семейства не припомню, кроме Scheme.
SICP читал, какие-то упражнения делал на Scheme. Помнится был в восторге от программы символьного дифференцирования.
Среди лисперов бытует мнение, что Scheme — идеальный язык, пока не пытаешься написать на нём что-то полезное. :) Мой опыт это мнение подтверждает.

Так же мой опыт подтверждает мнение, что чисто декларативные языки (например, erlang, синтаксис которого — prolog процентов на 80) нужны только в сильно многопоточных приложениях. Иначе идеальны мультипарадигменные вроде Common Lisp или (внезапно) ещё шевелящегося D. Или Python. Или C++, если бы не его многочисленные другие недостатки.

Потому что почти в любой задаче есть и императивные и декларативные куски. А императивные иногда легко описываются как набор объектов, а иногда — как набор процедур.
Да, я с этим согласен сам использую разные парадигмы в коде. Я собственно сразу написал, что место декларативному подходу вообще есть. Но «чистые» вещи, вроде хаскеля, навечно обречены быть инструментом для решения задачек с Project Euler-а :) Пролог видимо такой же сферический конь в вакуме, да еще и с совсем скудными возможностями — реализовать пролог в лиспе задачка на вечер.
Для Питера Норвига это задача на пол часа :D
norvig.com/paip/prolog.lisp
Я мож чего не понял, но понятие «алгоритм» — сугубо императивное. Как можно вообще просить сделать «алгоритм» на Прологе?
И да и нет. Конечно, совковое определение алгоритма императивное. Однако единого мнения на этот счет нету, есть версии определения вполне годящиеся и для декларативных языков. Например: «Алгоритм — это всякая система вычислений, выполняемых по строго определённым правилам, которая после какого-либо числа шагов заведомо приводит к решению поставленной задачи»
Но какие определения не давай, все равно, вы правы, алгоритмы обычно даются в императивной записи в виде строгой последовательности действий.
раз на нем никто не пишет, значит плохой язык был, независимо от того, что сделали японцы
то что многие пишут на PHP не хороший, так и prolog не плохой потому что никто не пишет — причины какие-то другие. Одна из них — в эпоху его распространения он требовал памяти больше чем было в системе.
ну, а сейчас почему на него не переходят? потому что он не приспособлен к реальным задачам. я считаю так.
гм… про паровозы тоже говорили «кто на этом железном взрывоопасном чудовище поедет?»
на мой взгляд, критическая масса еще не набралась — пока с коммерческой точки зрения пролог невыгоден
хотя может и не наберется никогда — конкуренты есть и тоже развиваются
А вот вам другой пример: многие в том числе и Intel прекрасно знает, что x86 архитектура тяжела и неповоротлива сегодня, с огромным количеством ошибок и костылей, даже были попытки со стороны той же Intel представить что-то принципиально новое, но почему-то мы до сих пор сидим на этой x86 архитектуре… Интересно почему?

Или вот пример из прошлого: Симула была первым ООП, но было не её время и проект и сам подход себя тогда изжил. Сейчас какой вид программирования доминирующий?

Порой наработанные привычки и инерционный подход и потребление не позволяют чему-то принципиально новому придти сделать качественный скачок вперёд. Что-то новое, пусть и хорошо забытое старое, вылезает в условиях той современной конкуренции подходов только если в наиболее популярных сегодня подходах накопится критическая масса неудобства, ошибок, противоречий и сложности.
Реальным задачам это к каким? Web? А в какой-нибудь системе определения атак или неполадок вполне можно было бы использовать пролог, мне кажется.

Далее, где этот пролог? Я могу из перла эффективно использовать программу на прологе, или из каких-то других языков? Есть реализации, но пролог написанный на perl — это диковато, там структуры данных развесистые, надо память экономить.

А во-вторых сейчас программирование забито сильно программированием сайтов, остальные направления массовому программисту просто не видны, хотя они и есть. Думаю, что и на прологоподобных языках пишут, задачи искусственного интеллекта типа распознавания чего-то ведь никуда не делись.
Так вроде Erlang жив, а он и пролог — почти одно и то же.
из похожего — только схожий синтаксис, а так все разное
Есть несколько общих идей, например, паттерн матчинг и там и там можно применять где угодно, а не в строго обозначенных синтаксисом местах, как в большинстве других языков где он есть, синтаксис похож.

Модель вычислений разная. Функциональная и логическая соответственно. Обе декларативные.
Ну автор прочел пару «бестселлеров» и убежден, что схватил ту эпоху целиком, хотя кажется и близко не подошел…
и ничего о Рейгане.
У нас его в школе в 10 классе целых две четверти преподавали. Никто так и не понял что это и для чего. На неокрепшие мозги без какого-то бекграунда не ложатся такие абстракции…
жуть какая…
за жестокое обращение с детьми привлечь педагогов не пытались? :)
Мне студенты педунивера говорили об экспериментах, в которых обучали семилетних детей паскалю и прологу. Скорость овладения примерно одинаковая. Но переучивание на другой язык требует значительно большего времени.
Предлагаю ограничиться четырьмя ветвями на верхнем уровне. Я привязал каждую ветвь к языку, который был первым в своем семействе в хронологическом порядке:

* объектно-ориентированные (1972, SmallTalk);
Все хорошо, но это Simula 67 — первый ОО язык.

The Vietnam War was still a page-4 item; barricades had not yet sprung up in the streets of Paris; a mini-skirt could still cause a stir: away by the Northern shores of the Baltic a few fortunate software developers led by a handful of visionaries were already profiting from the power of classes, inheritance, polymorphism, dynamic binding and most of the other marvels of object orientation.
Газеты обсуждали войну во Вьетнаме, Париж пока еще не зарос баррикадами, миниюбка могла вызвать переполох, а счастливчики с северного побережья Балтики уже использовали классы, наследование, полиморфизм, динамическое связывание и другие вкусности ОО.
НЛО прилетело и опубликовало эту надпись здесь
Извините, но Вы c COBOL хорошо знакомы? Чтоб это утверждать? Я его в глаза не видел никогда, но английская вики говорит, что ОО в него стали добовлять только 90х. И окончательно эта фича вошла в него только по стандарту 2002 года.
НЛО прилетело и опубликовало эту надпись здесь
Интересное мнение о «Конец истории...» Фукуямы. Такое ощущение что автор не читал работу, а просто что-то слышал о ней.
«Prolog is similar to Lisp on the main points.» — Norvig, PAIP, p. 381
Да ну. Дело совсем не в этом, как мне кажется. Ну не получилось у японцев с Пролгом, почему это должно означать смерть языку? У многих современных стартапов, разрабатывающих процессоры с новыми микроархитектурами, не получается с Си. Си от этого слабее не становится.

IMHO, дело в самом Прологе. Просто на практике умение пролога строить логические выводы от одного набора предикатов к другому не так уж и востребовано. Для человечества гораздо важнее хранить большие объёмы данных, кодировать и декодировать сигналы, проводить инженерные расчёты. Пролог (в чистом виде) для всех этих целей совсем не подходит. Будь он даже в 100 раз параллельнее ФОРТРАНА. Ну не для этого он (как и LISP) был предназначен. Поэтому, как бы, и кажется, что на фоне других языков Пролог не успешен.

Вот. Но, IMHO, Пролог (да у меня странный стиль переключения раскладок :) в своей нише живее всех живых. И последователи у него есть, при чём весьма продвинутые. Взять тот же Oz. Плюс алгоритмы, на которых Prolog построен, широко используются в других проектах, в символьной математике, например, которая широко используется в пакетах для расчётов.

И т.д. и т.п. Так что, говорить, что Пролог — штука не успешная, вряд ли оправдано. Хороший язык, хорошая концепция для определённого класса задач, успешно всё это развивается и используется. Просто круг задач не такой широкий.
НЛО прилетело и опубликовало эту надпись здесь
Раньше и трава зеленее была…
Спасибо за интересную статью.
Изучал и Lisp и Prolog, поэтому будет очень интересно узнать о них побольше.
Если с примерами будет, то вообще замечательно. :)
На самом деле пролог живет и сейчас как средство прототипирования алгоритмов… Занимался в свое время, писал на ECLiPSe строил динамические модифицируемые сети решений уравнений в ограничениях с условие веса каждого из уровнений…

ECLiPSe кстати это уже не стандартный пролог, а пролог с механизмом «отложенного выполнения целей», к нему кстати и gtk прикручивается :) можно GUI делать. Дык вот программка у меня была где-то на 400 строк (без GUI)… Конечно работало это не шустро, но я потом прикинул сколько бы у меня такая-же программка занимала на с++ и получилось что не меньше 3500 тыс. строк :) тобишь в 7 раз больше…

То что пролог выворачивает мозг и чтобы на нем программировать надо забыть о функциональном программировании это точно :) но надо сказать что когда привыкаешь, то просто «подсаживаешься» на этот «кайф» :) начинаешь просто думать на нем ;)

Вобщем имхо для науки, когда хочется быстро запрототипировать какой-нить довольно сложный алгоритм на графах, пролог очень даже само то…
Пролог не убил, а улучшил SQL (как правильно написано выше).
А следующим этапом должно быть QBE с учетом возможных вопросов к БД.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории