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

Prolog *

Язык и система логического программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Логическое программирование для начинающих. Prolog

Уровень сложности Простой
Время на прочтение 8 мин
Количество просмотров 7.3K

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

Читать далее
Всего голосов 10: ↑10 и ↓0 +10
Комментарии 12

Новости

Динамическая База данных на Turbo Prolog

Уровень сложности Средний
Время на прочтение 11 мин
Количество просмотров 5.1K

Реализация динамической базы данных на Turbo prolog с сохранением в CSV файл.

Читать далее :-)
Всего голосов 20: ↑20 и ↓0 +20
Комментарии 12

Prolog in Prolog: зачем и как

Время на прочтение 9 мин
Количество просмотров 3.3K

Язык Prolog создавался для задач иссуственного интеллекта, который сейчас обычно называют "классическим", чтобы не путать с задачами машинного обучения путем подбора большого числа числовых параметров. Важным классом таких задач является моделирование "мира", в котором можно совершать какие-либо действия. Игрушечным примером такого мира является Nani Search. И решают их часто в таком стиле: состояние мира помещается в прологовскую базу данных и все изменения производятся путем удаления и добавления фактов в это хранилище. Но это получается уже не логическое программирование, а самое настоящее императивное! При этом используются худшие практики программирование - глобальное состояние! Мимо этого я пройти не могу!

Но самое плохое в таком подходе не стиль, в конце концов большая часть современного кода императивна, и даже частенько использует, явно или неявно, глобальные переменные. Важно что состоятние мира перестает быть first-order value и пропадает возможность решать задачи в моделируемом мире, для чего и создавался язык Prolog.

Читать далее
Всего голосов 16: ↑16 и ↓0 +16
Комментарии 11

Как белорусы уже 30 лет делают искусственный интеллект при помощи ТРИЗ

Время на прочтение 4 мин
Количество просмотров 56K
image

«Это не программисты, это не разработчики, это — камикадзе.»

  • Минские студенты в 1987 году во главе с Валерием Цуриковым принялись программировать «Изобретающую машину» — софт, который бы усиливал интеллект инженеров и помогал изобретать. Кооператив был успешен и захватил 95% рынка бывших в странах СССР.
  • Когда СССР прекратил существовать, Валерий Цуриков перебрался в Бостон и основал свой «стартап» в 1992 году: Invention Machine Corp. Им заинтересовались Samsung, Boeing, NASA, Sony, Procter&Gamble.
  • В 1998 году журнал NASA провел опрос среди подписчиков и по результату голосования «Изобретающая машина» стала «the most innovative product in USA».
  • В 2012 году IHS inc купила Invention Machine Corp за 40 миллионов долларов.


30 лет назад Валерий Цуриков в спортивной сумке провез через границу 5000 фунтов и в Лондоне купил лицензионный язык «Пролог» (пожалуй, единственный лицензионный пакет на территории бывшего СССР). «Пролог» тогда был запрещённым к экспорту в страны СССР.

Эти ребята с фотографии тогда только что окончили радиотехнический институт и школу молодого изобретателя и с радостью начали писать на «Прологе». Они не знали, что на этом языке не было написано ни одной промышленной системы.

Через год профессору Ковальски, создателю языка «Пролог», показали рабочую систему и он не поверил, что она работает. Это был первый промышленный софт на «Прологе».
Читать дальше →
Всего голосов 81: ↑57 и ↓24 +33
Комментарии 209

Истории

AI на минималках 2: Генератор стихов на Prolog

Время на прочтение 11 мин
Количество просмотров 35K

AI на минималках 2: Генератор стихов на Prolog


Мемная картинка


На картинке — четверостишье, сгенерированное моей программой.


Оказывается "стихи" писать легко, нужно только знать несколько необходимых ингредиентов: размер, ритм, рифма. "Стихи" в кавычках, потому что в настоящем стихосложении, как и в любом другом искусстве, незыблемых законов нет. Однако в классике (русской силлабо-тонике) очень много правил, при соблюдении которых получается писать неплохие стихи, даже если вы никогда раньше этого не делали. Причём эти правила довольно просто программируются: "в строке должно быть равно N слогов", "нечётные строки должны рифмоваться", "ударные и безударные слоги в строке должны идти в определённом порядке" и т.д. Перечислив все правила, я свёл задачу генерации стихов к простому комбинаторному поиску. Язык Prolog как раз и предназначен для таких задач — описании правил и генерации объектов, выполняющих эти правила.


Кто хочет научится писать стихи и познакомиться с Prolog, прошу под кат.

Читать дальше →
Всего голосов 36: ↑36 и ↓0 +36
Комментарии 25

Проблема логических языков программирования

Время на прочтение 5 мин
Количество просмотров 10K
Некоторое время назад я писал про «Интернациональное программирование на естественных языках», в которой попытался представить достойную цель для абстрактного языка программирования, попробовав примерить на него роль связующего звена между миром программистов с компьютерами и не программистов.

Но в результате оказалось, что это не нужно в принципе, т.к. «не программистам» просто не требуется учиться писать программы. А если иногда такое желание и возникает, то вполне хватает обычных формализованных языков программирования, которых уже сейчас насчитывается наверно более десяти тысяч.

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

За исключением одного класса задач. Задач, решение которых нельзя описать в виде алгоритма. Но можно указать некие критерии, которым должно удовлетворять искомое решение. Я имею ввиду логические языки программирования и Пролог, как самый яркий представитель этого класса.

Еще помню воспоминание из юности, когда удалось достать дискету с этим языком. Ух, с каким задором горели мои глаза, когда мне казалось, ну вот, еще чуть-чуть и будет создана система с базой знаний, у которой и можно будет получить заветный ответ 42 на любой вопрос.

Так почему этого так и не случилось? В чем проблема Пролога, да и любой системы / языка программирования, назначение которых анализировать факты и искать ответы на вопросы?

Эта проблема называется «Комбинаторный взрыв» — экспоненциальная (или более) зависимость времени работы алгоритма от количества входных данных. И есть как минимум два решения этой проблемы.
Читать
Всего голосов 27: ↑19 и ↓8 +11
Комментарии 86

Роль логического программирования, и стоит ли планировать его изучение на 2021-й

Время на прочтение 13 мин
Количество просмотров 15K

В русскоязычном интернете достаточно мало информации о логическом программировании, особенно адаптированной для новичков. Эту проблему я попытался отчасти решить в данной статье, рассказав о том, что такое логическое программирование, какие задачи решают с его помощью, и стоит ли вообще это изучать.

Давайте рассуждать логически
Всего голосов 57: ↑57 и ↓0 +57
Комментарии 16

Что за X++? Что за ABAP? Древние языки, про которые интересно слушать, но не дай бог на них писать

Время на прочтение 6 мин
Количество просмотров 27K

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

Но почти в каждой компании в этот момент найдется человек со взглядом на сотню ярдов в пустоту, который будет вспоминать, как 10 лет назад в своем НИИ ШМИИ ИПИАН «Меловой период» его заставляли переписывать гигантскую систему с Лиспа на Си. И у всех в этот момент пробежит холодок по спине — потому что никто не застрахован от рефакторинга чего-нибудь древнего и страшного.

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

Здесь мы собрали вместе людей, которые писали на Prolog, Forth, ABAP и X++, и дали им выговориться.

Читать далее
Всего голосов 51: ↑42 и ↓9 +33
Комментарии 92

Навеянное Prolog-ом коммерческое решение пробыло больше 10 лет в эксплуатации

Время на прочтение 13 мин
Количество просмотров 5.1K
Для большинства программистов которые хотя бы слышали про Prolog это только странный артефакт из времён когда компьютеры были размером с динозавров. Некоторые сдали и забыли в институте. И лишь узкие как листочек A4 специалисты сталкивались с чем-то подобным в современном мире. Так уж получилось, что далёком 2003-ем году я использовал некоторые решения подчерпнутые из Prolog-а, в коммерческих играх на Flash и больше десятилетия они радовали французов. Причём применил я это полудекларативное решение не потому что прочитал книжку Братко и впечатлился, а потому что это было реально нужно нашему проекту. Я до сих пор регулярно порываюсь воспроизвести то решение на современном уровне, потому что оно очень много где было бы полезным в современном игрострое, но, к сожалению, каждый раз находятся дела поважнее… В общем об этом всём и расскажу.


Скриншот той самой флэшовой игры до сих пор приветствует вас на сайте toox.com/jeux/jeux-de-cartes/coinche
Ещё раз предупреждаю, всё что будет дальше не про Prolog, а про надёрганные из него идеи
Всего голосов 28: ↑26 и ↓2 +24
Комментарии 12

Слышали о языке Prolog?

Время на прочтение 8 мин
Количество просмотров 31K
Prolog — это один из тех языков, которые программисты обычно изучают в самом начале карьеры (например — в школе или в институте). Его, правда, забывают почти сразу же после того, как изучили.

Почему? Ну, лично я виню в этом индустрию разработки ПО. Я работаю в этой сфере последние 17 лет. Я участвовал в самых разных проектах, связанных с веб-разработкой и с большими данными (а именно, это были крупные интернет-площадки, ETL-конвейеры и прочее подобное). Суть в том, что за всё это время я не увидел ни одной строчки кода, написанной на Prolog.



Теперь расскажу о том, что случилось на прошлой неделе. Это был совершенно обычный вторник, я проводил собеседование с начинающим программистом. Когда я спросил его о том, на каких ещё языках программирования он может писать, он ответил так: «Я учил Prolog в университете, но им уже никто не пользуется».

Это заставило меня задуматься о том, насколько подобное заявление соответствует действительности.
Читать дальше →
Всего голосов 92: ↑78 и ↓14 +64
Комментарии 123

Просто о Прологе

Время на прочтение 10 мин
Количество просмотров 6.2K

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


Задача 391. Perfect Rectangle


Given N axis-aligned rectangles where N > 0, determine if they all together form an exact cover of a rectangular region.
Each rectangle is represented as a bottom-left point and a top-right point. For example, a unit square is represented as [1,1,2,2]. (coordinate of bottom-left point is (1, 1) and top-right point is (2, 2)).
image
Example 1: rectangles = [
[1,1,3,3],
[3,1,4,2],
[3,2,4,4],
[1,3,2,4],
[2,3,3,4]]
Return true. All 5 rectangles together form an exact cover of a rectangular region.

Example 3:rectangles =
[ [1,1,3,3],
[3,1,4,2],
[1,3,2,4],
[3,2,4,4]]
Return false. Because there is a gap in the top center.
Читать дальше →
Всего голосов 17: ↑16 и ↓1 +15
Комментарии 11

Что такое логическое программирование и зачем оно нам нужно

Время на прочтение 17 мин
Количество просмотров 43K

У того, кто в детстве не писал на Прологе — нет сердца, а у того, кто пишет на нём сегодня — нет мозгов. (оригинал)

Если вас всегда терзали мучительные сомнения — что за фигня это Логическое Программирование (ЛП) и вообще зачем оно нужно? То это статья для вас.


Можно по-разному разделить языки программирования на группы (часто их называют парадигмами программирования), например, вот так:


  • структурное: программа разбивается на блоки — подпрограммы (изолированные друг от друга), а основными элементами управления являются последовательность команд, ветвление и цикл.
  • объектно-ориентированное: задача моделируется в виде объектов, которые отправляют друг другу сообщения. Объекты обладают свойствами и методами. Абстракция. Инкапсуляция. Полиморфизм. Ну в общем, все в курсе.
  • функциональное: базовым элементом является функция и сама задача моделируется в виде функции, а, точнее, чаще всего в виде их композиции, если f(.) и g(.) — это функции, то f(g(.)) — это их композиция.
  • логическое: вот тут, как правило, начинается феерия — если про первые три написаны сотни статей, книг, обзоров, презентаций и учебников, то здесь мы в лучшем случае видим что-то про Prolog и разработки времён Pink Floyd и Procol Harum (ну хоть с музыкой им тогда повезло) и на этом история заканчивается.

Вот эту оплошность я и собираюсь сегодня исправить.


Важнейший тезис этой статьи:


Логическое программирование != Prolog.

И вообще последний вам скорее всего не нужен. А вот первое вполне может быть.


Структура статьи:


  • Что такое Пролог и почему он вам скорее всего не нужен
  • Зачем оно надо, или краткое введение в Answer Set Programming
  • Решаем задачи на ASP
  • Комбинаторная оптимизация
  • Вероятностное ЛП: ProbLog
  • ЛП на классической логике FO(.) и IDP
  • Sketched Answer Set Programming
  • Экспериментальный анализ
  • Тестирование и корректность программ
  • Заключение
Читать дальше →
Всего голосов 30: ↑29 и ↓1 +28
Комментарии 22

Диагностическая медицинская экспертная система на Prolog

Время на прочтение 12 мин
Количество просмотров 15K

Вступление


Как то мне посчастливилось выбирать тему дипломной работы по специальности программная инженерия, и я выбрал написание экспертной системы, причем именно на языке Пролог. Хоть в промышленном программировании он почти не используется, он интересен в теоретическом плане позволяет самым быстрым способом прикоснуться к интеллектуальным системам(ИС). Также сам язык интересен в спортивном плане, так как заставляет мыслить в непривычной манере, отличной от мышления процедурного программирования и ООП, что является хорошой тренировкой для мозгов.

Использовалась реализация Prolog — Visual Prolog, с встроенными библиотеками GUI. Но если
вы хотите написать GUI на Qt/C++, то в документации есть инструкция, как импортировать программу в DLL, и скомпилировать ее вместе с C/C++ проектом. Отсюда следует, что совместить можно и с другими языками.

Вообще когда я работал над этим проектом, я не нашел примеров достаточно не примитивных, но в то же время и не настолько больших, как наворочен
Читать дальше →
Всего голосов 20: ↑19 и ↓1 +18
Комментарии 10

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн

Используем Пролог

Время на прочтение 14 мин
Количество просмотров 6.9K

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


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


Взяться за представления следующей задачки долго не получалось, и вот уже получено первое решение, демонстрирую задачу и узнаю, на сколько оно сильно медленно.


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


Так вот, задача такова:


  1. Trapping Rain Water II
    Given an m x n matrix of positive integers representing the height of each unit cell in a 2D elevation map, compute the volume of water it is able to trap after raining.
    Note:
    Both m and n are less than 110. The height of each unit cell is greater than 0 and is less than 20,000.
    Example:

    image

    Given the following 3x6 height map:
    [
    [1,4,3,1,3,2],
    [3,2,1,3,2,4],
    [2,3,3,2,3,1]
    ]
    Return 4.


Читать дальше →
Всего голосов 20: ↑17 и ↓3 +14
Комментарии 74

Ищем убийцу на Прологе

Время на прочтение 8 мин
Количество просмотров 8.5K
Каждое воскресенье в нашей компании принято устраивать весёлые викторины, это одна из них.

Загадка


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

  • Для начала, представим подозреваемых. Есть три мужчины (Джордж, Джон, Роберт) и три женщины (Барбара, Кристина, Иоланда). Каждый человек находится в отдельной комнате (ванная, столовая, кухня, гостиная, кладовая, кабинет). В каждой комнате найдено подозрительное оружие (сумка, огнестрельное оружие, газ, нож, яд, верёвка). Вопрос: кого нашли на кухне?
  • Подсказка 1. При мужчине на кухне нет ни верёвки, ни ножа, ни сумки. Оружие не является огнестрельным. Вопрос: какое оружие найдено на кухне?
Читать дальше →
Всего голосов 30: ↑30 и ↓0 +30
Комментарии 9

Разминки с Прологом

Время на прочтение 7 мин
Количество просмотров 4.3K

Путешественники, привет.


Если вы это читаете предлагаю продолжение того "занимательного" материала, который я писал перед этим. Если вы немного проследили за мыслью, которая изветвилась в три статьи, а основной то посыл — был, только в том, чтобы показать интерес к декларативному подходу. Он почему то не велик, как будто эСКюэЛ не стал общедоступным и обязательным, ведь без него невозможно подумать, а как можно обработать данные иначе. Правда, ведь лучше сформулировать задачу и не заботиться о том, во что это воплощается.


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


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


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


Хватит вызывать заинтересованность, начинаю...

Читать дальше →
Всего голосов 20: ↑18 и ↓2 +16
Комментарии 10

Занимательный пролог #3

Время на прочтение 5 мин
Количество просмотров 4K

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


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


Я написал реализацию которая в среднем была вот такого вида скорости, значит есть еще 90 процентов решений, которых я не заметил, что кто-то знает как ее решить еще быстрее и он молчит, и посмотрев две предыдущие статьи не сказал: ах, если это вопрос производительности, тогда все понятно — тут пролог не подходит. Но с производительностью сейчас все нормально, представить себе программу, которая будет запущена на слабом железе не возможно, "в конце концов, зачем об этом думать?"


Вызов


Решить задачу еще быстрее, там был питон и было время, и есть на питоне более быстрое решение?



Мне сообщают "Runtime: 2504 ms, faster than 1.55% of Python3 online submissions for Wildcard Matching."

Читать дальше →
Всего голосов 20: ↑15 и ↓5 +10
Комментарии 39

Занимательный пролог #2

Время на прочтение 7 мин
Количество просмотров 3.1K

Привет, сообщество разработчиков, надо довести дело до конца.


В предыдущем моем опусе был вызов показать как можно использовать язык Пролог, да и показать что бы это было забавно. Превратить это в упражнение.


Попробую продолжить выпендриваться демонстрировать.


Коротко напомню задачу:


Wildcard Matching

Given an input string (s) and a pattern (p), implement wildcard pattern matching with support for '?' and ''.
'?' Matches any single character.
'
' Matches any sequence of characters (including the empty sequence).
The matching should cover the entire input string (not partial).


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


Хардкорно я получил от него 66 и проверил свое решение — пока все работало. Но не может быть все так просто.


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


Попробую переписать данное решение на языке понятном доступном в этой системе (они отражают популярность языков программирования современности).


Итак, выбираю Питон.

Читать дальше →
Всего голосов 15: ↑15 и ↓0 +15
Комментарии 2

Занимательный пролог

Время на прочтение 8 мин
Количество просмотров 9.2K

Привет, жители, пришло время поговорить про декларативное программирование. Это когда вам в институте втирали, что программы можно не кодить, а формулировать. Это противоположность императивности, которая сейчас во всех языках программирования. Отдадим должное функциональному подходу, он тут братский, и дело свое делает все глубже проникая в современность, вот вам и лямбды в си++ и яваскрипты, может хаскел?


Но грустнее дело обстоит с логическим, продукционным программированием, которое можно представить только на Prolog.


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


Итого цель статьи: решить во время написания статьи задачу, которая была еще не известна на начало поста и показать свой код мысли, подтвердив это ходом и полученным рабочим решением. Но для этой проверки нужен арбитр, сам себя не рецензируешь-то. Выберу в этой роли leetcode.com.


1. Итак


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


2. Задача 44. Wildcard Matching

Читать дальше →
Всего голосов 17: ↑16 и ↓1 +15
Комментарии 34

Автоматическое порождение программ, обратная задача и некоторые связанные с ними решения

Время на прочтение 8 мин
Количество просмотров 4K
Здравствуйте, уважаемые читатели. В этой статье речь пойдет об одном подходе к автоматическому порождению программ по блочной модели задачи, к решению обратной задачи (восстановления модели исходной проблемы по уже порожденной программе), а также к решению проблемы верификации порожденных программ. Сама по себе тема очень серьезная, но статью я, по возможности, постараюсь сделать популярной (без тяжеловесного обзора аналогов, строго оформленной теоретической части и прочих сложностей), с примерами и описанием различных применений.
Читать дальше →
Всего голосов 20: ↑15 и ↓5 +10
Комментарии 9
1

Вклад авторов