<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
	<title>Хабрахабр:  Метки / prolog</title>
	<link>http://habrahabr.ru/rss/tag/prolog/</link>
	<description><![CDATA[]]></description>
	<language>ru</language>
	<managingEditor>editor@habrahabr.ru</managingEditor>
	<generator>habrahabr.ru</generator>
	<pubDate>Sat, 11 Feb 2012 02:48:36 GMT</pubDate>
	<lastBuildDate></lastBuildDate>
	<image>
		<link>http://habrahabr.ru/</link>
		<url>http://habrahabr.ru/i/logo.gif</url>
		<title>Хабрахабр</title>
	</image>
	
			
		<item>		
			<title><![CDATA[Prolog / Prolog — грамматический разбор и языковые проблемы]]></title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/prolog/136742/</guid>
			<link>http://habrahabr.ru/blogs/prolog/136742/</link>			
			<description><![CDATA[Грамматический разбор — тема, которую должен знать и ориентироваться каждый программист. Именно, потому что применяем ее каждый день. Да мы не пишем новые языки или не правим грамматики каждый день, но мы пользуемся регулярными выражениями, задумываемся о сложности и вычислимости, думаем о количестве строк кода, что имеет непосредственное отношение к грамматикам.<br/>
<br/>
Целью этой статьи является попытка показать связи в различных областях знаний, как программирование и математика, философия и логика, а так же продемонстрировать в действии одну из наиболее удачных областей применения языка Prolog — грамматический разбор.<br/>
<br/>
<div class="habracut"> <a class="habracut" href="http://habrahabr.ru/blogs/prolog/136742/#habracut">Читать дальше &rarr;</a> </div>]]></description>
			
			<pubDate>Sun, 22 Jan 2012 23:33:33 GMT</pubDate>
			<author>vics001</author>
			<category>Prolog</category><category>аналитическая философия</category><category>пролог</category><category>грамматика</category><category>язык</category>
		</item>
		
		
		
		
		
		
		
		
	
		
			
		<item>		
			<title><![CDATA[Prolog / [Из песочницы] Prolog. Программируем автоматы]]></title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/prolog/136670/</guid>
			<link>http://habrahabr.ru/blogs/prolog/136670/</link>			
			<description><![CDATA[Прочитав <a href="http://habrahabr.ru/blogs/programming/124820/">статью</a> о Prolog, я решил написать небольшое дополнение к ней в виде 2 небольших задач.<br/>
 Вот они:<br/>
1. Интерпретатор языка brainfuck<br/>
2. Машина Тьюринга<br/>
<div class="habracut"> <a class="habracut" href="http://habrahabr.ru/blogs/prolog/136670/#habracut">Читать дальше &rarr;</a> </div>]]></description>
			
			<pubDate>Fri, 20 Jan 2012 13:35:53 GMT</pubDate>
			<author>freest</author>
			<category>brainfuck</category><category>prolog</category><category>машина тьюринга</category>
		</item>
		
		
		
		
		
		
		
	
		
			
		<item>		
			<title><![CDATA[Идеи для стартапов / [Из песочницы] Язык описания экономических расчётов — идея программы]]></title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/startup_ideas/130838/</guid>
			<link>http://habrahabr.ru/blogs/startup_ideas/130838/</link>			
			<description><![CDATA[Главная цель этой статьи это не получение инвайта, а возможность поделиться идеей и получить комментарии по поводу её целесообразности и перспективности от сообщества специалистов. (Инвайт за эту статью я уже получил — спасибо неизвестному хабр другу)<br/>
Когда-то я работал программистом в проектом институте в экономическом отделе.<br/>
Мы производили экономические расчёты для крупной организации (Башнефть). Я обеспечивал техническое обеспечение этих расчётов.<br/>
Я столкнулся с тем, что по настоящему удобного инструмента для этих целей нет.<br/>
У меня появилась идея подобного инструмента- специального декларативного языка, напоминающего Prolog- языка описания экономических расчётов.<br/>
<div class="habracut"> <a class="habracut" href="http://habrahabr.ru/blogs/startup_ideas/130838/#habracut">Читать дальше &rarr;</a> </div>]]></description>
			
			<pubDate>Thu, 20 Oct 2011 12:22:39 GMT</pubDate>
			<author>MasterDe</author>
			<category>язык программирования</category><category>стартап</category><category>идея для стартапа</category><category>prolog</category>
		</item>
		
		
		
		
		
		
		
	
		
		
		
			
		<item>		
			<title><![CDATA[Программирование / [Перевод] Функторы в языках программирования]]></title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/programming/125995/</guid>
			<link>http://habrahabr.ru/blogs/programming/125995/</link>
			<description><![CDATA[Интересно, что термин &quot;<b>функтор</b>&quot; означает совершенно разные вещи в разных языках программирования. Возьмем, например, <b>C++</b>. Каждый, кто освоил мастерство C++, знает, что класс, который реализует <b><code>operator()</code></b>, называется функтором. Теперь возьмём <b>Standard ML</b>. В ML функторы отображают структуры на структуры. Теперь <b>Haskell</b>. В Haskell функторы — это просто гомоморфизм над категориями. А в <b>Prolog</b> функтор означает атом в начале структуры. Все они различаются. Давайте подробнее рассмотрим каждый из них.<br/>
<div class="habracut"> <a class="habracut" href="http://habrahabr.ru/blogs/programming/125995/#habracut">Читать дальше &rarr;</a> </div>]]></description>
			
			<pubDate>Wed, 10 Aug 2011 07:27:23 GMT</pubDate>
			<author>Amper</author>
			<category>cpp</category><category>functor</category><category>functors</category><category>haskell</category><category>ml</category><category>prolog</category><category>sml</category><category>standard ml</category><category>функтор</category><category>функторы</category><category>хаскель</category>
		</item>
		
		
		
		
		
	
			
		<item>		
			<title><![CDATA[Prolog / Prolog — примеры использования (Часть 2)]]></title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/prolog/124820/</guid>
			<link>http://habrahabr.ru/blogs/prolog/124820/</link>			
			<description><![CDATA[В первой части <a href="http://habrahabr.ru/blogs/programming/124636/">статьи</a> о Prolog рассказывалось о структуре, синтаксисе и интерпретации языка. Конечно же научно-популярная литература интересна для программиста, но гораздо более интересно что-то интерактивное, живое, запускаемое. Поэтому в этой статье я предлагаю вооружиться <a href="http://www.swi-prolog.org/download/stable">SWI-Prolog</a> и рассмотреть решения простейших задач на Прологе.<br/>
<br/>
Прежде, чем начинать, хотелось бы кратко ответить на злободневные вопросы от хабрачитателей:<br/>
 — Где реально используется Пролог?<br/>
 — Такие проекты существуют, некоторые приводились в комментариях к 1-й статье. Важно что, большинство программистов пишут на Прологе не от безвыходности, а от того, что им нравится Пролог. В конце концов Пролог не может использоваться для любой задачи, такой создание UI или манипулирование с файлами.<br/>
<br/>
 — Почему таких проектов мало?<br/>
 — Потому что программистов владеющих Пролог крайне мало, не только потому что люди не изучали его, а потому что недоизучали для написания полных программ. Главная же причина, что люди недостаточно четко понимают в каких ситуациях лучше всего его использовать. Часто можно видеть, что ярые сторонники Пролога, пишут на нем все, включая обработчиков клавиатуры и мыши, из-за чего код получается еще хуже, чем на С.<br/>
<br/>
 — Почему нет сообщества Пролога?<br/>
 — Оно есть. Такова специфика языка, что он очень полюбился в академической среде (большинство Prolog систем пишутся в различных университетах и наоборот практически любой университет пишет свой Пролог), из-за этого можно сказать страдает и применимость языка. Стоит отметить, что сообщество небольшое, но очень лояльное: практически все известные языки нашли свое отражение в современных языках (Lisp, ML -&gt; F#, Scala; Smalltalk -&gt; Java, Scala (агенты), скриптовые -&gt; Ruby), в отличие от Пролог.<br/>
<br/>
Думаю на этом хватит философских рассуждений и можно приступить к реальным примерам :)<br/>
<br/>
В конце как обычно ожидает задача на приз.<br/>
 <div class="habracut"> <a class="habracut" href="http://habrahabr.ru/blogs/prolog/124820/#habracut">Читать дальше &rarr;</a> </div>]]></description>
			
			<pubDate>Tue, 09 Aug 2011 09:39:20 GMT</pubDate>
			<author>vics001</author>
			<category>prolog</category><category>алгоритмы</category>
		</item>
		
		
		
		
		
		
		
		
	
			
		<item>		
			<title><![CDATA[Prolog / Prolog — удивительный язык программирования]]></title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/prolog/124636/</guid>
			<link>http://habrahabr.ru/blogs/prolog/124636/</link>			
			<description><![CDATA[ — Чем же он удивительный? Я знаю пару десятков языков и для меня не проблема изучить еще один новый, я просто уже не вижу необходимости.<br/>
<br/>
Пролог — уникален. Это единственный язык представляющий парадигму декларативного программирования; это язык, который имеет сотни различных имплементаций, но они все равно называются Prolog, добавляя лишь префиксы и суффиксы к названию; это живой язык в котором не происходит никаких существенных изменений более 20 лет; это, наверное, единственный настолько популярный язык программирования, который не имеет применения в реальном программировании. Почему же Prolog? <br/>
<br/>
Пролог — уникален по своей природе, он появился благодаря счастливому совпадению (<s>таинственному устройству мира</s>). Когда-то в 60-х годах очень бурно развивалась теория автоматического доказательства теорем и Робинсоном был предложен алгоритм резолюций, который позволял доказать любую верную теорему (вывести из аксиом) за конечное время (за какое не известно). Как оказалось позже, это наилучшее решение общей задачи, невозможно доказать теорему за ограниченное число операций. Простыми словами, алгоритм представляет собой обход (в общем случае бесконечного) графа в ширину, естественно, что предсказуемость работы алгоритма практически равно 0, соответственно для Языка Программирования — это абсолютно не подходит. И в этот момент Кальмэроу нашел блестящее сужение задачи, благодаря которому доказательство некоторых теорем выглядело как процедурное исполнение программы. Стоит отметить, что класс доказуемых теорем достаточно широк и очень хорошо применим для класса программируемых задач. Вот так в 1972 появился Prolog.<br/>
<br/>
В этой статье я попытаюсь рассказать о Prolog как инструменте решения общих логических задач. Этот топик будет интересен тем, кто уже владеет синтаксисом Prolog и хочет понять его изнутри, а также тем, кто абсолютно не владеет синтаксисом языка, но хочет понять его «изюминку» не тратя лишнее время на изучение синтаксических конструкций.<br/>
<br/>
<div class="habracut"> <a class="habracut" href="http://habrahabr.ru/blogs/prolog/124636/#habracut">Читать дальше &rarr;</a> </div>]]></description>
			
			<pubDate>Fri, 22 Jul 2011 13:57:25 GMT</pubDate>
			<author>vics001</author>
			<category>языки программирования</category><category>пролог</category><category>prolog</category>
		</item>
		
		
		
		
		
		
		
		
	
			
		<item>		
			<title><![CDATA[Prolog / Задача Эйнштейна на Mercury]]></title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/prolog/122147/</guid>
			<link>http://habrahabr.ru/blogs/prolog/122147/</link>			
			<description><![CDATA[Продолжаем неделю задачи Эйнштейна на Хабре. В дополнение к трём представленным решениям<br/>
<ol>
<li><a href="http://habrahabr.ru/blogs/crazydev/121061/">Регулярным языком</a></li>
<li><a href="http://habrahabr.ru/blogs/Haskell/122123/">Хаскеллем</a></li>
<li><a href="http://habrahabr.ru/blogs/programming/122142/">Прологом</a></li>
</ol><br/>
позвольте представить еще одно на <a href="http://habrahabr.ru/tag/mercury%20programming%20language/">Mercury</a>.<br/>
<br/>
Напомним <a href="http://ru.wikipedia.org/wiki/Mercury_(%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)">Википедию</a>:<br/>
<br/>
<b>Mercury</b> — язык функционально-логического программирования со строгой типизацией…<br/>
<div class="habracut"> <a class="habracut" href="http://habrahabr.ru/blogs/prolog/122147/#habracut">Читать дальше &rarr;</a> </div>]]></description>
			
			<pubDate>Sat, 18 Jun 2011 15:19:40 GMT</pubDate>
			<author>xonix</author>
			<category>mercury</category><category>mercury programming language</category><category>logic</category><category>declarative</category><category>prolog</category><category>haskell</category><category>typeclasses</category><category>einstein</category><category>zebra puzzle</category><category>functional programming</category>
		</item>
		
		
		
		
		
		
		
		
	
			
		<item>		
			<title><![CDATA[Prolog / Задача Эйнштейна на Прологе]]></title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/prolog/122142/</guid>
			<link>http://habrahabr.ru/blogs/prolog/122142/</link>			
			<description><![CDATA[Хотел продолжить неделю задачи Эйнштейна на Хабре. После <a href="http://habrahabr.ru/blogs/crazydev/121061/">очень</a> и <a href="http://habrahabr.ru/blogs/Haskell/122123/">не очень</a> нестандартных решений, хотелось бы показать как логические задачки можно (и нужно) решать на языках логического программирования (простите за тавтологию). <br/>
Под катом можно увидеть почему Пролог так хорошо подходит для решения этой задачи.<div class="habracut"> <a class="habracut" href="http://habrahabr.ru/blogs/prolog/122142/#habracut">Читать дальше &rarr;</a> </div>]]></description>
			
			<pubDate>Sat, 18 Jun 2011 11:04:57 GMT</pubDate>
			<author>susl</author>
			<category>prolog</category><category>einsteins riddle</category><category>zebra puzzle</category>
		</item>
		
		
		
		
		
		
		
		
	
			
		<item>		
			<title><![CDATA[Ненормальное программирование / Пишем интерпретатор Brainfuck на Mercury]]></title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/crazydev/113099/</guid>
			<link>http://habrahabr.ru/blogs/crazydev/113099/</link>			
			<description><![CDATA[Продолжая <a href="http://habrahabr.ru/search/?q=brainfuck">неделю Brainfuck на хабре</a> и свои <a href="http://habrahabr.ru/blogs/programming/112030/">эксперименты</a> с <a href="http://progopedia.ru/language/mercury/">Mercury</a>, написал свою версию интерпретатора. Заранее прошу извинить, что еще не представил «вступительную» статью о Mercury. На самом деле, она в процессе написания. <br/>
Пока же приведу код решения, который проиллюстрирует заодно несколько возможностей языка Mercury.<br/>
<div class="habracut"> <a class="habracut" href="http://habrahabr.ru/blogs/crazydev/113099/#habracut">Читать дальше &rarr;</a> </div>]]></description>
			
			<pubDate>Thu, 03 Feb 2011 17:04:29 GMT</pubDate>
			<author>xonix</author>
			<category>brainfuck</category><category>mercury</category><category>mercury programming language</category><category>prolog</category><category>DCG</category><category>functional programming</category><category>declarative</category>
		</item>
		
		
		
		
		
		
		
		
	
			
		<item>		
			<title><![CDATA[Программирование / Пролог: База фактов из CSV файла]]></title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/programming/112137/</guid>
			<link>http://habrahabr.ru/blogs/programming/112137/</link>			
			<description><![CDATA[<h4>Импорт фактов в базу пролога из файла в формате CSV</h4><br/>
<br/>
Для того чтобы работать с фактами базы данных в прологе их (факты) необходимо импортировать из внешнего источника. <br/>
<br/>
<a href="http://4.bp.blogspot.com/_0ubDuNCcrSo/TTX82V3I3hI/AAAAAAAAAU8/cPZeRRJHL4M/s1600/%25D0%25A1%25D1%2585%25D0%25B5%25D0%25BC%25D0%25B0.png"><img src="http://4.bp.blogspot.com/_0ubDuNCcrSo/TTX82V3I3hI/AAAAAAAAAU8/cPZeRRJHL4M/s640/%25D0%25A1%25D1%2585%25D0%25B5%25D0%25BC%25D0%25B0.png"/></a><br/>
На схеме условно показаны три области активностей: <br/>
Желтая — подготовка промежуточного файла. Для простого импорта это может быть просто сохранение документа в формате CSV. Для работы по регламенту возможна настройка компонентов БД (например MS SQL Server Integration Services) для периодической выгрузки. Данная активность в статье не рассматривается.<br/>
Красная — импорт данных из CSV файла в базу фактов.<br/>
Зеленая — работа с базой фактов в Прологе. <br/>
Примечание. Стрелками показаны потоки данных.<br/>
<div class="habracut"> <a class="habracut" href="http://habrahabr.ru/blogs/programming/112137/#habracut">Читать дальше про красную и зеленую область...</a> </div>]]></description>
			
			<pubDate>Wed, 19 Jan 2011 09:47:51 GMT</pubDate>
			<author>alexchin</author>
			<category>prolog</category><category>пролог</category><category>csv</category><category>swi-prolog</category>
		</item>
		
		
		
		
		
		
		
		
	
			
		<item>		
			<title><![CDATA[Программирование / Игра Жизнь на языке программирования Mercury]]></title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/programming/112030/</guid>
			<link>http://habrahabr.ru/blogs/programming/112030/</link>			
			<description><![CDATA[В рамках экспериментов с языком программирования <a href="http://en.wikipedia.org/wiki/Mercury_(programming_language)">Mercury</a> а также под впечатлением уже неоднократно поднимавшейся в последнее время здесь темы игры Жизнь (<a href="http://habrahabr.ru/blogs/javascript/111686/">1</a>, <a href="http://habrahabr.ru/blogs/python/111247/">2</a>, <a href="http://habrahabr.ru/blogs/crazydev/111332/">3</a>) захотелось написать свою реализацию на этом интересном языке программирования.<br/>
<br/>
В двух словах о Mercury. Этот язык функционально-логического программирования замышлялся как усовершенствование prolog'а. Усовершенствование заключается в введении в пролог статической типизации (а так же декларирование режима детерминизма). Как результат — больше возможностей у компилятора создать эффективный исполнимый код, больший контроль на этапе компиляции. Любителям пролога, наверняка знаком анекдот:<br/>
<blockquote>Q: How many Prolog programmers does it take to change a light bulb?<br/>
A: False.<br/>
</blockquote><br/>
 В царстве прологов нишу типизированных прочно занимает <a href="http://www.visual-prolog.com/">Visual Prolog</a>. Но, стоит отметить, что подходы Visual Prolog и Mercury весьма отличны.<div class="habracut"> <a class="habracut" href="http://habrahabr.ru/blogs/programming/112030/#habracut">Читать дальше &rarr;</a> </div>]]></description>
			
			<pubDate>Mon, 17 Jan 2011 19:10:33 GMT</pubDate>
			<author>xonix</author>
			<category>mercury</category><category>mercury programming language</category><category>prolog</category><category>haskell</category><category>game of life</category><category>life</category><category>conway</category><category>kx.com</category><category>APL</category>
		</item>
		
		
		
		
		
		
		
		
	
		
		
		
			
		<item>		
			<title><![CDATA[История ИТ / [Перевод] Фатальный выбор]]></title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/history/107165/</guid>
			<link>http://habrahabr.ru/blogs/history/107165/</link>
			<description><![CDATA[В своей предыдущей <a href="http://habrahabr.ru/blogs/history/106224/">статье</a> (<a href="http://unconnected.info/lo1.aspx">en</a>), я рассказывал об истории японского проекта вычислительных систем пятого поколения, запущенного под звон фанфар в 1982 и почившего в 1992, прихватив с собой логическое программирование. В этой я расскажу о том, как в качестве языка для систем пятого поколения был выбран Пролог, вместо более очевидного Лиспа. Мне интересен феномен людей, способных формировать приверженцев того или иного языка. Надеюсь, в этой статье я смогу объяснить его.<br/>
<div class="habracut"> <a class="habracut" href="http://habrahabr.ru/blogs/history/107165/#habracut">Читать дальше &rarr;</a> </div>]]></description>
			
			<pubDate>Fri, 29 Oct 2010 09:47:15 GMT</pubDate>
			<author>unconnected</author>
			<category>fgcs</category><category>prolog</category><category>lisp</category>
		</item>
		
		
		
		
		
	
		
		
		
			
		<item>		
			<title><![CDATA[История ИТ / [Перевод] Кто убил пролог?]]></title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/history/106224/</guid>
			<link>http://habrahabr.ru/blogs/history/106224/</link>
			<description><![CDATA[Существуют тысячи языков программирования (строго говоря, так утверждают люди, которые их считают). Классификация такого количеств их разновидностей весьма сложна и служит источником споров. Тем не менее, классификация запутанна и зачастую противоречит сама себе. Предлагаю ограничиться четырьмя ветвями на верхнем уровне. Я привязал каждую ветвь к языку, который был первым в своем семействе в хронологическом порядке:<br/>
<ul>
<li>императивные (1956, Фортран);</li>
<li>функциональные (1959, Лисп);</li>
<li>объектно-ориентированные (1972, SmallTalk);</li>
<li>логические (1974, Пролог).</li>
</ul><br/>
В своих рассуждениях я буду отталкиваться от факта, что три семейства из четырех чувствуют себя неплохо, в том смысле, что у них есть множество преемников. По отношению к этим трем Пролог чрезвычайно отстал. Но в начале 1980-ых было по-другому. Тогда Пролог соревновался с Лисп за умы тех, кто занимался не-IBM программированием (назовем это так, чтобы избежать неоднозначного термина ИИ).<br/>
<div class="habracut"> <a class="habracut" href="http://habrahabr.ru/blogs/history/106224/#habracut">Читать дальше &rarr;</a> </div>]]></description>
			
			<pubDate>Fri, 15 Oct 2010 11:12:25 GMT</pubDate>
			<author>unconnected</author>
			<category>fgcs</category><category>prolog</category><category>lisp</category><category>miti</category>
		</item>
		
		
		
		
		
	
			
		<item>		
			<title><![CDATA[Персональные блоги / Реализация переборного механизма пролога на Python]]></title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/personal/83672/</guid>
			<link>http://habrahabr.ru/blogs/personal/83672/</link>			
			<description><![CDATA[Как известно (некоторым), пролог обладает тем замечательным свойством, что вызов каждого предиката в общем случае порождает несколько (хотя, может и не одной) точек возврата. Это значит то, что если на некоем шаге вызов очередного предиката потерпит неудачу, будет произведен откат исполнения к ближайшей точке возврата, и продолжено исполнение с новыми альтернативными данными, возращаемыми предикатом, породившим возврат. Когда все возвраты в некой точке исчерпаются, будет производится откат к предыдущим, пред-предыдущим и т.д. точкам возврата. Вероятно, смекалистый читатель уже сообразил, что то что в прологе записывается линейным набором предикатов, типа<br/>
<br/>
<code>pred1(X, Y), pred2(Y, Z), pred3(Z).<br/>
</code><br/>
<br/>
в традиционных языках представляется чем-то вроде следующей вложенной конструкции<br/>
<br/>
<code>for Y in pred1(X) {<br/>
&nbsp;&nbsp;for Z in pred2(Y) {<br/>
&nbsp;&nbsp;&nbsp;&nbsp;pred3(Z)<br/>
&nbsp;&nbsp;}<br/>
}<br/>
</code><br/>
<br/>
В принципе, именно на этом замечательном свойстве основано удобство, лаконичность и декларативность решений некоторых классов задач на прологе (разбор текста, задачи поиска, ...). Вероятно, после прочтения предыдущей части этого сообщения вам станет в общих чертах понятно приводимое мною ранее <a href="http://xonix.habrahabr.ru/blog/51644/">решение одной занимательной задачки</a>. <br/>
<br/>
Однако, мы отвлеклись. <div class="habracut"> <a class="habracut" href="http://xonix.habrahabr.ru/blog/83672/#habracut">Читать дальше &rarr;</a> </div>]]></description>
			
			<pubDate>Tue, 09 Feb 2010 20:57:02 GMT</pubDate>
			<author>xonix</author>
			<category>prolog</category><category>python</category>
		</item>
		
		
		
		
		
		
		
		
	
			
		<item>		
			<title><![CDATA[Prolog / RE: Занимательная задачка]]></title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/prolog/51644/</guid>
			<link>http://habrahabr.ru/blogs/prolog/51644/</link>			
			<description><![CDATA[Копаясь в поиске сайта, наткнулся на <a href="http://mako.habrahabr.ru/blog/38728/">занимательную задачку</a> и не смог отказать себе в удовольствии потратить 10 минут времени для решения её на полюбившемся мне прологе.<br/>
<br/>
<blockquote><code><font><font color="#909090"><i>% ((((1?2)?3)?4)?5)?6</i></font><br/>
<b>solve</b>(<font color="#808000"><i>Formula</i></font>) :-<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#808000"><i>Signs</i></font> <font color="blue"><b>=</b></font> [+, -, *, //],<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<font color="blue"><b>member</b></font>(<font color="#808000"><i>Op1</i></font>, <font color="#808000"><i>Signs</i></font>),<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<font color="blue"><b>member</b></font>(<font color="#808000"><i>Op2</i></font>, <font color="#808000"><i>Signs</i></font>),<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<font color="blue"><b>member</b></font>(<font color="#808000"><i>Op3</i></font>, <font color="#808000"><i>Signs</i></font>),<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<font color="blue"><b>member</b></font>(<font color="#808000"><i>Op4</i></font>, <font color="#808000"><i>Signs</i></font>),<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<font color="blue"><b>member</b></font>(<font color="#808000"><i>Op5</i></font>, <font color="#808000"><i>Signs</i></font>),<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#808000"><i>A</i></font> <font color="blue"><b>=</b></font>.. [<font color="#808000"><i>Op1</i></font>, 1, 2],<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#808000"><i>B</i></font> <font color="blue"><b>=</b></font>.. [<font color="#808000"><i>Op2</i></font>, <font color="#808000"><i>A</i></font>, 3],<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#808000"><i>C</i></font> <font color="blue"><b>=</b></font>.. [<font color="#808000"><i>Op3</i></font>, <font color="#808000"><i>B</i></font>, 4],<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#808000"><i>D</i></font> <font color="blue"><b>=</b></font>.. [<font color="#808000"><i>Op4</i></font>, <font color="#808000"><i>C</i></font>, 5],<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#808000"><i>Formula</i></font> <font color="blue"><b>=</b></font>.. [<font color="#808000"><i>Op5</i></font>, <font color="#808000"><i>D</i></font>, 6],<br/>
&nbsp;&nbsp;&nbsp;&nbsp;35 <font color="blue"><b>=</b></font>:<font color="blue"><b>=</b></font> <font color="#808000"><i>Formula</i></font>.<br/>
</font></code></blockquote><br/>
<br/>
Результат работы кода:<br/>
<div class="habracut"> <a class="habracut" href="http://habrahabr.ru/blogs/prolog/51644/#habracut">Читать дальше &rarr;</a> </div>]]></description>
			
			<pubDate>Tue, 10 Feb 2009 19:00:29 GMT</pubDate>
			<author>xonix</author>
			<category>prolog</category>
		</item>
		
		
		
		
		
		
		
		
	
			
		<item>		
			<title><![CDATA[Prolog / Правильность скобочной структуры, prolog]]></title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/prolog/50693/</guid>
			<link>http://habrahabr.ru/blogs/prolog/50693/</link>			
			<description><![CDATA[На правах развлечения в пятничный вечер.<br/>
<br/>
<blockquote><code><font><b>bracket</b>(<font color="#008000"><b>&quot;]&quot;</b></font>) --&gt; <font color="#008000"><b>&quot;[&quot;</b></font>.<br/>
<b>bracket</b>(<font color="#008000"><b>&quot;)&quot;</b></font>) --&gt; <font color="#008000"><b>&quot;(&quot;</b></font>.<br/>
<b>bracket</b>(<font color="#008000"><b>&quot;}&quot;</b></font>) --&gt; <font color="#008000"><b>&quot;{&quot;</b></font>.<br/>
<br/>
brackets --&gt; <b>bracket</b>(<font color="#808000"><i>Close</i></font>), <b>brackets</b>, <font color="#808000"><i>Close</i></font>, <b>brackets</b>.<br/>
brackets --&gt; [].<br/>
<br/>
<b>check</b>(<font color="#808000"><i>BracesStr</i></font>) :-<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<b>phrase</b>(<b>brackets</b>, <font color="#808000"><i>BracesStr</i></font>), <font color="blue"><b>!</b></font>.<br/>
</font></code></blockquote><br/>
<code>?- check(&quot;[[[]]][][[]][()]{}[]&quot;).<br/>
true.<br/>
<br/>
?- check(&quot;[[[)]]][][[]][()]{}[]&quot;).<br/>
false.<br/>
</code><br/>
P. S. Решение на вашем любимом ЯП приветствуется )]]></description>
			
			<pubDate>Fri, 30 Jan 2009 17:37:26 GMT</pubDate>
			<author>xonix</author>
			<category>prolog</category>
		</item>
		
		
		
		
		
		
		
		
	
			
		<item>		
			<title><![CDATA[Prolog / Prolog, введение]]></title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/prolog/49399/</guid>
			<link>http://habrahabr.ru/blogs/prolog/49399/</link>			
			<description><![CDATA[Довольно оживленное обсуждение предыдущей стати (<a title="http://habrahabr.ru/blogs/programming/47416/" href="http://habrahabr.ru/blogs/programming/47416/">http://habrahabr.ru/blogs/programming/47416/</a>) показало, что тема пролога оказалась интересна сообществу.<br/>
Чтобы заинтересовать еще более читателя и вместе с тем облегчить ему начало работы с этим языком, я решил написать немного начальных данных о прологе.<br/>
<br/>
Кратко основные особенности.<br/>
<div class="habracut"> <a class="habracut" href="http://habrahabr.ru/blogs/prolog/49399/#habracut">Читать дальше &rarr;</a> </div>]]></description>
			
			<pubDate>Sat, 17 Jan 2009 18:20:15 GMT</pubDate>
			<author>xonix</author>
			<category>prolog</category><category>intro</category><category>refal</category><category>programming</category><category>logic</category><category>logic programming</category><category>declarative</category>
		</item>
		
		
		
		
		
		
		
		
	
			
		<item>		
			<title><![CDATA[Prolog / Немного о Prolog'е]]></title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/prolog/47416/</guid>
			<link>http://habrahabr.ru/blogs/prolog/47416/</link>			
			<description><![CDATA[Язык пролог незаслуженно обладает довольно узкой известностью, между тем это довольно интересный язык, который несомненно стоит того, чтоб познакомиться с ним.<br/>
<br/>
Если честно, мне лень описывать синтаксис и особенности пролога, кому интересно, без труда найдут достаточное количество материала в интернете, благо язык довольно академичный. Скажу лишь, чем меня он заинтересовал. Дело в том, что пролог, по сути единственный язык, предлагающий качественно другой подход к программированию, чем хорошо известные императивный, ООП (который, по сути, тоже императивный, но нацелен на структурирование и модульность), функциональный. Можно назвать этот подход декларативно-логическим.<br/>
Не претендуя на точность терминологии, этот подход можно определить как такой, при котором программа представляет собой описанние теми или иными конструкциями языка программирования <i>самого условия задачи</i>. Роль ЯП при этом понять это описание, и сделать из него некоторый вывод, который окажется ни чем иным как правильным решением задачи.<br/>
Проиллюстрируем, что под этим подразумевается. Возьмем следующую задачу.<br/>
<br/>
<div class="habracut"> <a class="habracut" href="http://habrahabr.ru/blogs/prolog/47416/#habracut">Читать дальше &rarr;</a> </div>]]></description>
			
			<pubDate>Sat, 20 Dec 2008 20:47:43 GMT</pubDate>
			<author>xonix</author>
			<category>declarative</category><category>logic</category><category>prolog</category><category>refal</category><category>logic programming</category><category>programming</category>
		</item>
		
		
		
		
		
		
		
		
	
			
		<item>		
			<title><![CDATA[Персональные блоги / вот тебе бабушка и plan9, prolog и haskell.]]></title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/personal/7671/</guid>
			<link>http://habrahabr.ru/blogs/personal/7671/</link>			
			<description><![CDATA[Хм. Изобретал, писал статью, анализировал, и вот доанализировался. Выходит что на масштабах расспараллеливания, более крупных, чем автоматический внутри процессора, самый удобный метод описания взаимосвязи между параллельными компонентами программы - это файлы, хитрые, конечно, больше похожие на память, но файлы. При этом все попытки изобрести суперпупергипер систему для распараллеливания сводятся к созданию простой и эффективной распределённой файловой системы, не привязанной к дискам, конечно (привет Робу Пайку и Plan9). Но что самое занятное, всё это очень тесно связано с функциональным программированием и математикологическими предложениями Хорна. Можно на всё и так смотреть. Хых. Может быть, кину сюда статью, если условия публикации и карма позволят. Надо ещё попробовать в png выкладывать архивы : ) Руки всё не доходят.]]></description>
			
			<pubDate>Sat, 28 Apr 2007 07:09:03 GMT</pubDate>
			<author>mikhanoid</author>
			<category>plan9</category><category>prolog</category><category>haskell</category><category>параллелизм</category>
		</item>
		
		
		
		
		
		
		
		
	
	
	
	
	
	
	
	

	
</channel>
</rss>

