Рубрика «Prolog» - 3

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

Здесь вы не найдёте устаревшего посыла «функциональное программирование спасёт мир!»; мой список состоит из куда менее популярных наименований. Готов поспорить, многие из читателей вообще не слышали о большинстве языков и парадигм, о которых пойдёт речь, так что надеюсь, вам будет так же интересно с ними разбираться, как и мне.

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

Шесть парадигм программирования, которые изменят ваш взгляд на код - 1

Читать полностью »

В задачах искусственного интеллекта применяются различные модели представления знаний и методы вычислений — мягкие вычисления, генетические алгоритмы, нейросети, логические модели и другие подходы. Все эти методы основаны на символьных вычислениях и поэтому могут быть реализованы на основе языка PROLOG.
Здесь мы рассмотрим методы построения интеллектуальных систем на основе логического подхода, который наиболее близок природе логического программирования и часто применяется в экспертных системах.
Читать полностью »

Язык логического программирования PROLOG (далее – ПРОЛОГ) большинству программистов представляется чем-то запутанным и малопригодным для практического применения. В то же время, Интернет основан на символьной информации, поэтому практически все современные программисты сталкиваются с необходимостью обрабатывать символьные структуры данных, а ведь для этого и предназначен язык логического программирования ПРОЛОГ. Этот язык – идеальный для работы с символьными структурами, текстовыми файлами и для построения интеллектуальных программ. Читать полностью »

Представьте себе высокоуровневый язык, в котором не нужно указывать КАК получить результат, вместо этого нужно просто указать ЧТО вы хотите получить. При этом область применения языка не ограничена и язык способен решать те же задачи, что и любой другой высокоуровневый язык, наподобие JAVA. Кажется фантастикой, не правда ли? Однако такой язык есть и называется он PROLOG. Посмотрим как PROLOG справляется с этой задачей на примере загадывания прологу некоторых загадок и попросим PROLOG выдать доказательство теоремы.

image

Читать полностью »

Эта статья является ответом на статью «Задача Эйнштейна на Прологе». В ней автор пишет, что Пролог очень хорошо подходит для решения этой задачи и что суммарное количество строк почти совпадает с условиями задачи. Здесь я хочу показать, что на C# количество строк кода может быть примерно тем же. Я просто скопирую решение на Прологе и немного изменю синтаксис. Сначала приведу итоговый результат, а потом распишу функции. Вот что получилось:
Читать полностью »

Есть много материала по решению запутанных задачек на Прологе (например, страница Hakan Kjellerstrand о B-Prolog). Однако часто приводятся задачи, которые либо создавались для решения вручную (имеют маленькое пространство поиска), либо изначально ориентированы на решение при помощи логического программирования.

Я хочу показать мое решение на Прологе задачи AAAAAA с первого раунда Facebook Hacker Cup 2014. Задача имеет достаточно большое пространство поиска и создана с прицелом на решение опытными спортивными программистами на распространенных языках программирования.
Читать полностью »

Введение

Многие считают, что язык программирования prolog является сугубо научным и устаревшим языком для обучения студентов. Большинство в университете «напрягали» именно этим языком на предметах, хоть немного приближенных к теме искусственного интеллекта, эта тема не обошла и меня.

Стандартная задача, которая мне попалась – оказалась настолько скучной и распространенной для этого языка, что был соблазн «скачать готовую бесплатно без регистрации», но я решил вынести максимум из этого курса и повернуть тему пролога, для написания чего-нибудь практически значимого и интересного. Прочитав достаточно много разной документации, в том числе и посты на хабре о prolog, я пришел к выводу, что пролог является отличным инструментом для обработки предложений формального языка. Я решил, что было бы круто – написать бота, который бы умел отвечать на фразы (может быть даже складно) вконтакте.
Читать полностью »

Если распознающая машина на рисунок слона отзывается сигналом «мура», на изображения верблюда — тоже «мура» и на портрет видного ученого — опять-таки «мура», это не обязательно означает, что она неисправна. Она может быть просто философски настроена.
Владимир Савченко, «Открытие себя»

1. Полюбите Рефал. Немедленно!

Всем известно, что есть такой язык программирования — Рефал. Рефал разработан в 1966 году нашим соотечественником Валентином Турчиным. Судьба у Рефала сложная, но язык до сих пор жив и развивается. Для интересующихся приведем несколько ссылок:

Сильно утрируя, можно сказать, что Рефал — это смесь Лиспа и Пролога. В синтаксисе языка есть одна интересная особенность — сопоставление с образцом т.н. «прямым выводом».
Читать полностью »

Доброго времени суток! Я студентка второго курса МАИ, факультета Прикладной математики.
Недавно наш куратор, Сошников Дмитрий, координатор академических программ департамента стратегических технологий Microsoft, поставил передо мной задачу написать статью на тему: «Как объяснить своей младшей сестре (9 лет) принципы логического программирования?». Вот что из этого вышло.

image

Здравствуй, любимая сестренка! Сегодня я хочу рассказать тебе, что такое логическое программирование.
Читать полностью »

Решение логических задач на языке Haskell: в своём ли уме Валет?Сегодня я хотел бы подвести итоги под результатами августовского конкурса по функциональному программированию, который ежемесячно проводится под эгидой ФП(ФП). На этот раз в качестве задачи участникам была предложена несколько переформулированная задача из книги Р. М. Смаллиана «Алиса в стране смекалки»:

Тройка думает, что Туз не в своём уме. Четвёрка думает, что Тройка и Двойка обе не могут быть не в своём уме. Пятёрка думает, что Туз и Четвёрка либо оба не в своём уме, либо оба в своём уме. Шестёрка думает, что Туз и Двойка оба в своём уме. Семёрка думает, что Пятёрка не в своём уме. Валет думает, что Шестёрка и Семёрка обе не могут быть не в своём уме. В своём ли уме Валет?

Как видно, это задача на формальную логику. Несмотря на то, что некоторые участники применили интуиционистский подход к решению, задача решается в простейшей булевой логике, причём результат не отличается от того, что получается в интуиционистской логике. В любом случае, на этот раз решение оценивалось с точки зрения его выразительности, и мне хотелось, чтобы участники показали своё умение в оформлении программ в виде текста задачи. К сожалению, этого никто не сделал, поэтому далее будет показана программа на языке Haskell, которая решает задачу и выводит ответ на экран, причём написана она в очень своеобразном стиле, который многим может показаться негодным.

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js