<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Silveira Neto &#187; Prolog</title>
	<atom:link href="http://silveiraneto.net/tag/prolog/feed/" rel="self" type="application/rss+xml" />
	<link>http://silveiraneto.net</link>
	<description></description>
	<lastBuildDate>Fri, 09 Mar 2012 04:13:27 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Gerando permutações</title>
		<link>http://silveiraneto.net/2008/01/19/gerando-permutacoes/</link>
		<comments>http://silveiraneto.net/2008/01/19/gerando-permutacoes/#comments</comments>
		<pubDate>Sat, 19 Jan 2008 14:53:15 +0000</pubDate>
		<dc:creator>Silveira</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[ia]]></category>
		<category><![CDATA[inteligência artificial]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[listas]]></category>
		<category><![CDATA[Prolog]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Wladimir]]></category>

		<guid isPermaLink="false">http://silveiraneto.net/2008/01/19/gerando-permutacoes/</guid>
		<description><![CDATA[<a href="http://silveiraneto.net/2008/01/19/gerando-permutacoes/" title="Gerando permutações"></a>Muitas vezes para resolver uma única instância de um problema é mais rápido ataca-lo com força bruta do que encontrar um algoritmo geral com uma boa ordem de complexidade. Permutações são de grande utilidade nesse tipo de abordagem. Permutações em &#8230;<p class="read-more"><a href="http://silveiraneto.net/2008/01/19/gerando-permutacoes/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://silveiraneto.net/2008/01/19/gerando-permutacoes/" title="Gerando permutações"></a><p>Muitas vezes para resolver uma única instância de um problema é mais rápido ataca-lo com força bruta do que encontrar um algoritmo geral com uma boa ordem de complexidade. Permutações são de grande utilidade nesse tipo de abordagem.</p>
<p><span style="font-weight: bold">Permutações em Prolog:</span></p>
<p>Esse é um código em Prolog que o <a href="http://lia.ufc.br/~wladimir/">Wladimir Araujo</a> passou na cadeira de <a href="/tag/inteligencia-aritficial/">IA</a>.</p>

<div class="wp_syntax"><div class="code"><pre class="prolog" style="font-family:monospace;">select<span style="color: #009900;">&#40;</span>X<span style="color: #339933;">,</span> <span style="color: #009900;">&#91;</span>X<span style="color: #339933;">|</span>Xs<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> Xs<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
select<span style="color: #009900;">&#40;</span>X<span style="color: #339933;">,</span> <span style="color: #009900;">&#91;</span>Y<span style="color: #339933;">|</span>Ys<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#91;</span>Y<span style="color: #339933;">|</span>Zs<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:-</span> select<span style="color: #009900;">&#40;</span>X<span style="color: #339933;">,</span> Ys<span style="color: #339933;">,</span> Zs<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
&nbsp;
permutar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
permutar<span style="color: #009900;">&#40;</span>Xs<span style="color: #339933;">,</span> <span style="color: #009900;">&#91;</span>Z<span style="color: #339933;">|</span>Zs<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:-</span>
    select<span style="color: #009900;">&#40;</span>Z<span style="color: #339933;">,</span> Xs<span style="color: #339933;">,</span> Ys<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
    permutar<span style="color: #009900;">&#40;</span>Ys<span style="color: #339933;">,</span> Zs<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span></pre></div></div>

<p><span style="font-weight: bold">Permutações em Python:</span><br />
Esse é um código de um certo Michael Davies que eu tirei <a href="http://snippets.dzone.com/posts/show/753">daqui</a>. Ele gera uma lista com todas as permutações de uma lista. Muito bonitinho. :)</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> all_perms<span style="color: black;">&#40;</span><span style="color: #008000;">str</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span><span style="color: #008000;">str</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">&lt;</span>=<span style="color: #ff4500;">1</span>:
        <span style="color: #ff7700;font-weight:bold;">yield</span> <span style="color: #008000;">str</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>:
        <span style="color: #ff7700;font-weight:bold;">for</span> perm <span style="color: #ff7700;font-weight:bold;">in</span> all_perms<span style="color: black;">&#40;</span><span style="color: #008000;">str</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span>:<span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>:
            <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #008000;">len</span><span style="color: black;">&#40;</span>perm<span style="color: black;">&#41;</span>+<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>:
                <span style="color: #ff7700;font-weight:bold;">yield</span> perm<span style="color: black;">&#91;</span>:i<span style="color: black;">&#93;</span> + <span style="color: #008000;">str</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span>:<span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> + perm<span style="color: black;">&#91;</span>i:<span style="color: black;">&#93;</span></pre></div></div>

<p>Um exemplo de uso:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #66cc66;">&gt;&gt;&gt;</span> <span style="color: #ff7700;font-weight:bold;">for</span> p <span style="color: #ff7700;font-weight:bold;">in</span> all_perms<span style="color: black;">&#40;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'a'</span>,<span style="color: #483d8b;">'b'</span>,<span style="color: #483d8b;">'c'</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>:
	<span style="color: #ff7700;font-weight:bold;">print</span> p
<span style="color: black;">&#91;</span><span style="color: #483d8b;">'a'</span>, <span style="color: #483d8b;">'b'</span>, <span style="color: #483d8b;">'c'</span><span style="color: black;">&#93;</span>
<span style="color: black;">&#91;</span><span style="color: #483d8b;">'b'</span>, <span style="color: #483d8b;">'a'</span>, <span style="color: #483d8b;">'c'</span><span style="color: black;">&#93;</span>
<span style="color: black;">&#91;</span><span style="color: #483d8b;">'b'</span>, <span style="color: #483d8b;">'c'</span>, <span style="color: #483d8b;">'a'</span><span style="color: black;">&#93;</span>
<span style="color: black;">&#91;</span><span style="color: #483d8b;">'a'</span>, <span style="color: #483d8b;">'c'</span>, <span style="color: #483d8b;">'b'</span><span style="color: black;">&#93;</span>
<span style="color: black;">&#91;</span><span style="color: #483d8b;">'c'</span>, <span style="color: #483d8b;">'a'</span>, <span style="color: #483d8b;">'b'</span><span style="color: black;">&#93;</span>
<span style="color: black;">&#91;</span><span style="color: #483d8b;">'c'</span>, <span style="color: #483d8b;">'b'</span>, <span style="color: #483d8b;">'a'</span><span style="color: black;">&#93;</span></pre></div></div>

<p><strong>Outras implementações:</strong><br />
Em outras linguagens o código para gerar permutações geralmente é muito grande, então eu preferi deixar alguns links.</p>
<ul>
<li><a href="http://www.bearcave.com/random_hacks/permute.html">Permutações em C</a></li>
<li><a href="http://www.merriampark.com/perm.htm">Permutações em Java</a></li>
<li><a href="http://snippets.dzone.com/posts/show/3332">Permutações em Ruby</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://silveiraneto.net/2008/01/19/gerando-permutacoes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Família Simpsons em Prolog</title>
		<link>http://silveiraneto.net/2008/01/14/familia-simpsons-em-prolog/</link>
		<comments>http://silveiraneto.net/2008/01/14/familia-simpsons-em-prolog/#comments</comments>
		<pubDate>Mon, 14 Jan 2008 22:45:20 +0000</pubDate>
		<dc:creator>Silveira</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[código-fonte]]></category>
		<category><![CDATA[exemplo]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Prolog]]></category>
		<category><![CDATA[simpsons]]></category>

		<guid isPermaLink="false">http://silveiraneto.net/2008/01/14/familia-simpsons-em-prolog/</guid>
		<description><![CDATA[<a href="http://silveiraneto.net/2008/01/14/familia-simpsons-em-prolog/" title="Família Simpsons em Prolog"></a>% Fatos. homer. marge. bart. lisa. maggie. mona. jacqueline. patty. abraham. clancy. hugo. louise. herb. &#160; mulher&#40;marge&#41;. mulher&#40;maggie&#41;. mulher&#40;lisa&#41;. mulher&#40;mona&#41;. mulher&#40;clancy&#41;. mulher&#40;jacqueline&#41;. mulher&#40;selma&#41;. mulher&#40;patty&#41;. mulher&#40;louise&#41;. &#160; homem&#40;homer&#41;. homem&#40;bart&#41;. homem&#40;abraham&#41;. homem&#40;clancy&#41;. homem&#40;hugo&#41;. homem&#40;herb&#41;. &#160; progenitor&#40;homer,bart&#41;. progenitor&#40;homer,lisa&#41;. progenitor&#40;homer,maggie&#41;. progenitor&#40;marge,bart&#41;. progenitor&#40;marge,lisa&#41;. progenitor&#40;marge,maggie&#41;. &#160; &#8230;<p class="read-more"><a href="http://silveiraneto.net/2008/01/14/familia-simpsons-em-prolog/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://silveiraneto.net/2008/01/14/familia-simpsons-em-prolog/" title="Família Simpsons em Prolog"></a><p><center><img src="http://silveiraneto.net/wp-content/uploads/2008/01/os_simpsons_no_sofa.gif" alt="Os Simpsons no sofá" /></center></p>

<div class="wp_syntax"><div class="code"><pre class="prolog" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">% Fatos.</span>
homer<span style="color: #339933;">.</span>
marge<span style="color: #339933;">.</span>
bart<span style="color: #339933;">.</span>
lisa<span style="color: #339933;">.</span>
maggie<span style="color: #339933;">.</span>
mona<span style="color: #339933;">.</span>
jacqueline<span style="color: #339933;">.</span>
patty<span style="color: #339933;">.</span>
abraham<span style="color: #339933;">.</span>
clancy<span style="color: #339933;">.</span>
hugo<span style="color: #339933;">.</span>
louise<span style="color: #339933;">.</span>
herb<span style="color: #339933;">.</span>
&nbsp;
mulher<span style="color: #009900;">&#40;</span>marge<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
mulher<span style="color: #009900;">&#40;</span>maggie<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
mulher<span style="color: #009900;">&#40;</span>lisa<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
mulher<span style="color: #009900;">&#40;</span>mona<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
mulher<span style="color: #009900;">&#40;</span>clancy<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
mulher<span style="color: #009900;">&#40;</span>jacqueline<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
mulher<span style="color: #009900;">&#40;</span>selma<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
mulher<span style="color: #009900;">&#40;</span>patty<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
mulher<span style="color: #009900;">&#40;</span>louise<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
&nbsp;
homem<span style="color: #009900;">&#40;</span>homer<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
homem<span style="color: #009900;">&#40;</span>bart<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
homem<span style="color: #009900;">&#40;</span>abraham<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
homem<span style="color: #009900;">&#40;</span>clancy<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
homem<span style="color: #009900;">&#40;</span>hugo<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
homem<span style="color: #009900;">&#40;</span>herb<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
&nbsp;
progenitor<span style="color: #009900;">&#40;</span>homer<span style="color: #339933;">,</span>bart<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
progenitor<span style="color: #009900;">&#40;</span>homer<span style="color: #339933;">,</span>lisa<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
progenitor<span style="color: #009900;">&#40;</span>homer<span style="color: #339933;">,</span>maggie<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
progenitor<span style="color: #009900;">&#40;</span>marge<span style="color: #339933;">,</span>bart<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
progenitor<span style="color: #009900;">&#40;</span>marge<span style="color: #339933;">,</span>lisa<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
progenitor<span style="color: #009900;">&#40;</span>marge<span style="color: #339933;">,</span>maggie<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
&nbsp;
progenitor<span style="color: #009900;">&#40;</span>abraham<span style="color: #339933;">,</span> homer<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
progenitor<span style="color: #009900;">&#40;</span>mona<span style="color: #339933;">,</span> homer<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
&nbsp;
progenitor<span style="color: #009900;">&#40;</span>clancy<span style="color: #339933;">,</span> marge<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
progenitor<span style="color: #009900;">&#40;</span>clancy<span style="color: #339933;">,</span> patty<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
progenitor<span style="color: #009900;">&#40;</span>clancy<span style="color: #339933;">,</span> selma<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
progenitor<span style="color: #009900;">&#40;</span>jacqueline<span style="color: #339933;">,</span> marge<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
progenitor<span style="color: #009900;">&#40;</span>jacqueline<span style="color: #339933;">,</span> patty<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
progenitor<span style="color: #009900;">&#40;</span>jacqueline<span style="color: #339933;">,</span> selma<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
&nbsp;
progenitor<span style="color: #009900;">&#40;</span>abraham<span style="color: #339933;">,</span> herb<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
&nbsp;
progenitor<span style="color: #009900;">&#40;</span>herb<span style="color: #339933;">,</span> hugo<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
progenitor<span style="color: #009900;">&#40;</span>louise<span style="color: #339933;">,</span> hugo<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
&nbsp;
<span style="color: #666666; font-style: italic;">% Regras</span>
pai<span style="color: #009900;">&#40;</span>A<span style="color: #339933;">,</span>B<span style="color: #009900;">&#41;</span> <span style="color: #339933;">:-</span> homem<span style="color: #009900;">&#40;</span>A<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> progenitor<span style="color: #009900;">&#40;</span>A<span style="color: #339933;">,</span>B<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
mãe<span style="color: #009900;">&#40;</span>A<span style="color: #339933;">,</span>B<span style="color: #009900;">&#41;</span> <span style="color: #339933;">:-</span> mulher<span style="color: #009900;">&#40;</span>A<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> progenitor<span style="color: #009900;">&#40;</span>A<span style="color: #339933;">,</span>B<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
&nbsp;
é_pai<span style="color: #009900;">&#40;</span>A<span style="color: #009900;">&#41;</span> <span style="color: #339933;">:-</span> pai<span style="color: #009900;">&#40;</span>A<span style="color: #339933;">,</span>_<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
é_mãe<span style="color: #009900;">&#40;</span>A<span style="color: #009900;">&#41;</span> <span style="color: #339933;">:-</span> mãe<span style="color: #009900;">&#40;</span>A<span style="color: #339933;">,</span>_<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
&nbsp;
filho<span style="color: #009900;">&#40;</span>A<span style="color: #339933;">,</span>B<span style="color: #009900;">&#41;</span><span style="color: #339933;">:-</span> homem<span style="color: #009900;">&#40;</span>A<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> progenitor<span style="color: #009900;">&#40;</span>B<span style="color: #339933;">,</span>A<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
filha<span style="color: #009900;">&#40;</span>A<span style="color: #339933;">,</span>B<span style="color: #009900;">&#41;</span><span style="color: #339933;">:-</span> mulher<span style="color: #009900;">&#40;</span>A<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> progenitor<span style="color: #009900;">&#40;</span>B<span style="color: #339933;">,</span>A<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
&nbsp;
irmaos<span style="color: #009900;">&#40;</span>X<span style="color: #339933;">,</span>Y<span style="color: #009900;">&#41;</span> <span style="color: #339933;">:-</span>
	progenitor<span style="color: #009900;">&#40;</span>Z<span style="color: #339933;">,</span>X<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
	progenitor<span style="color: #009900;">&#40;</span>Z<span style="color: #339933;">,</span>Y<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
	X\<span style="color: #339933;">=</span>Y<span style="color: #339933;">.</span>
&nbsp;
irmao_completos<span style="color: #009900;">&#40;</span>A<span style="color: #339933;">,</span>B<span style="color: #009900;">&#41;</span> <span style="color: #339933;">:-</span>
	pai<span style="color: #009900;">&#40;</span>P<span style="color: #339933;">,</span>A<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> pai<span style="color: #009900;">&#40;</span>P<span style="color: #339933;">,</span>B<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
	mãe<span style="color: #009900;">&#40;</span>M<span style="color: #339933;">,</span>A<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> mãe<span style="color: #009900;">&#40;</span>M<span style="color: #339933;">,</span>B<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
	A\<span style="color: #339933;">=</span>B<span style="color: #339933;">.</span>
&nbsp;
tio<span style="color: #009900;">&#40;</span>T<span style="color: #339933;">,</span>A<span style="color: #009900;">&#41;</span> <span style="color: #339933;">:-</span>
	homem<span style="color: #009900;">&#40;</span>T<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
	irmaos<span style="color: #009900;">&#40;</span>T<span style="color: #339933;">,</span>X<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> progenitor<span style="color: #009900;">&#40;</span>X<span style="color: #339933;">,</span>A<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
&nbsp;
tia<span style="color: #009900;">&#40;</span>T<span style="color: #339933;">,</span>A<span style="color: #009900;">&#41;</span> <span style="color: #339933;">:-</span>
	mulher<span style="color: #009900;">&#40;</span>T<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
	irmaos<span style="color: #009900;">&#40;</span>T<span style="color: #339933;">,</span>X<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> progenitor<span style="color: #009900;">&#40;</span>X<span style="color: #339933;">,</span>A<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
&nbsp;
primo<span style="color: #009900;">&#40;</span>A<span style="color: #339933;">,</span>B<span style="color: #009900;">&#41;</span> <span style="color: #339933;">:-</span>
	homem<span style="color: #009900;">&#40;</span>A<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
	progenitor<span style="color: #009900;">&#40;</span>X<span style="color: #339933;">,</span>A<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
	progenitor<span style="color: #009900;">&#40;</span>Y<span style="color: #339933;">,</span>B<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
	irmaos<span style="color: #009900;">&#40;</span>X<span style="color: #339933;">,</span>Y<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
&nbsp;
prima<span style="color: #009900;">&#40;</span>A<span style="color: #339933;">,</span>B<span style="color: #009900;">&#41;</span> <span style="color: #339933;">:-</span>
	mulher<span style="color: #009900;">&#40;</span>A<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
	progenitor<span style="color: #009900;">&#40;</span>X<span style="color: #339933;">,</span>A<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
	progenitor<span style="color: #009900;">&#40;</span>Y<span style="color: #339933;">,</span>B<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
	irmaos<span style="color: #009900;">&#40;</span>X<span style="color: #339933;">,</span>Y<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
&nbsp;
avô<span style="color: #009900;">&#40;</span>A<span style="color: #339933;">,</span>B<span style="color: #009900;">&#41;</span> <span style="color: #339933;">:-</span> pai<span style="color: #009900;">&#40;</span>A<span style="color: #339933;">,</span>X<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> pai<span style="color: #009900;">&#40;</span>X<span style="color: #339933;">,</span>B<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
avó<span style="color: #009900;">&#40;</span>A<span style="color: #339933;">,</span>B<span style="color: #009900;">&#41;</span> <span style="color: #339933;">:-</span> pai<span style="color: #009900;">&#40;</span>A<span style="color: #339933;">,</span>X<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> pai<span style="color: #009900;">&#40;</span>X<span style="color: #339933;">,</span>B<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span></pre></div></div>

<p>Referências:</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Simpsons_family">Simpsons Family</a></li>
<li><a href="http://kti.ms.mff.cuni.cz/~bartak/prolog/genealogy.html">Genealogy Database, Guide to Prolog Programming</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://silveiraneto.net/2008/01/14/familia-simpsons-em-prolog/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Exemplos de Prolog</title>
		<link>http://silveiraneto.net/2007/08/29/exemplos-de-prolog/</link>
		<comments>http://silveiraneto.net/2007/08/29/exemplos-de-prolog/#comments</comments>
		<pubDate>Thu, 30 Aug 2007 01:00:13 +0000</pubDate>
		<dc:creator>Silveira</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Inteligência Aritficial]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Prolog]]></category>

		<guid isPermaLink="false">http://silveiraneto.net/2007/08/29/exemplos-de-prolog/</guid>
		<description><![CDATA[<a href="http://silveiraneto.net/2007/08/29/exemplos-de-prolog/" title="Exemplos de Prolog"></a>Prolog é uma linguagem de programação geralmente usada para inteligência artificial e linguística computacional. Faz um tempo que eu não uso Prolog então esse é meio um tutorial relâmpago para eu relembrar um pouco. São um apanhado de exemplos básicos &#8230;<p class="read-more"><a href="http://silveiraneto.net/2007/08/29/exemplos-de-prolog/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://silveiraneto.net/2007/08/29/exemplos-de-prolog/" title="Exemplos de Prolog"></a><p>Prolog é uma linguagem de programação geralmente usada para inteligência artificial e linguística computacional.</p>
<p><center><img src="http://silveiraneto.net/wp-content/uploads/2007/08/grafo_arvore.gif" alt="Grafo em árvore" /></center>Faz um tempo que eu não uso Prolog então esse é meio um tutorial relâmpago para eu relembrar um pouco. São um apanhado de exemplos básicos e um guia de instalação e uso do swi-prolog no Ubuntu.</p>
<p><span id="more-151"></span></p>
<h3>Instalação e Uso</h3>
<p>No Ubuntu há duas implementações de prolog disponíveis, a gprolog e a swi-prolog. Eu vou ficar com o swi-prolog que é um interpretador de prolog. Para instala-lo:</p>
<blockquote><p>sudo apt-get install swi-prolog</p></blockquote>
<p>Isso vai instalar o binário <em>swipl</em> que é o interpretador de Prolog.</p>
<h3>Exemplo 1 &#8211; Fatorial</h3>
<p>Crie um arquivo chamado fatorial.pl com esse conteúdo:</p>
<pre lang="PL/SQL">
factorial(0,1). 

factorial(N,F) :-
   N&gt;0,
   N1 is N-1,
   factorial(N1,F1),
   F is N * F1.</pre>
<p>Estando na mesma pasta do arquivo, chame o interpretador swipl:</p>
<blockquote><p>$ swipl<br />
Welcome to SWI-Prolog (Multi-threaded, Version 5.6.14)<br />
Copyright (c) 1990-2006 University of Amsterdam.<br />
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,<br />
and you are welcome to redistribute it under certain conditions.<br />
Please visit http://www.swi-prolog.org for details.</p>
<p>For help, use ?- help(Topic). or ?- apropos(Word).</p>
<p>?- ['fatorial.pl'].<br />
% fatorial.pl compiled 0.00 sec, 760 bytes</p>
<p>Yes<br />
?-</p></blockquote>
<p>O comando ['arquivo.pl']. (com ponto) vai carregar e interpretar um arquivo chamado arquivo.pl. Algumas &#8220;perguntas&#8221; que podemos fazer ao programa:</p>
<blockquote><p>?- fatorial(0,1).<br />
Yes<br />
?- fatorial(10,What).<br />
What = 3628800<br />
Yes</p></blockquote>
<p>As perguntas feitas foram:</p>
<ul>
<li>Fatorial de 0 é 1?</li>
<li>Quanto é o fatorial de 10?</li>
</ul>
<h3>Exemplo 2 &#8211; Torres de Hanoi</h3>
<p>O famoso problema das <a href="http://pt.wikipedia.org/wiki/Torre_de_Hanoi">Torres de Hanoi</a>.  Num arquivo chamado hanoi.pl escreva:</p>
<pre lang="PL/SQL">
move(1,X,Y,_) :-
    write('Move top disk from '),
    write(X),
    write(' to '),
    write(Y),
    nl.
move(N,X,Y,Z) :-
    N&gt;1,
    M is N-1,
    move(M,X,Z,Y),
    move(1,X,Y,_),
    move(M,Z,Y,X).</pre>
<p>Carregando o programa com ['hanoi.pl']. dentro do swipl podemos fazer o teste:</p>
<blockquote><p> ?-  move(3,left,right,center).<br />
Move top disk from left to right<br />
Move top disk from left to center<br />
Move top disk from right to center<br />
Move top disk from left to right<br />
Move top disk from center to left<br />
Move top disk from center to right<br />
Move top disk from left to right</p>
<p>yes</p></blockquote>
<h3>Exemplo 3 &#8211; Grafo</h3>
<p>Suponha o seguinte grafo que será representado no código-fonte:</p>
<p><center><img src="http://silveiraneto.net/wp-content/uploads/2007/08/grafo.gif" alt="Um grafo de 5 vértices" /></center>Vamos representa-lo no código-fonte a seguir que também possui definições para caminhos e viagens.</p>
<pre lang="PL/SQL">
edge(1,2).
edge(1,4).
edge(1,3).
edge(2,3).
edge(2,5).
edge(3,4).
edge(3,5).
edge(4,5).

connected(X,Y) :- edge(X,Y) ; edge(Y,X).

path(A,B,Path) :-
       travel(A,B,[A],Q),
       reverse(Q,Path).

travel(A,B,P,[B|P]) :-
       connected(A,B).
travel(A,B,Visited,Path) :-
       connected(A,C),
       C \== B,
       \+member(C,Visited),
       travel(C,B,[C|Visited],Path).</pre>
<p>Vamos perguntar qual o caminho entre 1 e 5:</p>
<blockquote><p>?- path(1,5,W).<br />
W = [1, 2, 5]<br />
Yes</p></blockquote>
<p>De onde veio e para onde vai o caminho 1, 2, 5, 4.</p>
<blockquote><p>?- path(DE, PARA, [1,2,5,4]).<br />
DE = 1<br />
PARA = 4<br />
Yes</p></blockquote>
<p><strong>Referencias</strong></p>
<ul>
<li><a href="http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/contents.html">http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/contents.html</a></li>
<li><a href="http://en.wikipedia.org/wiki/Prolog">http://en.wikipedia.org/wiki/Prolog</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://silveiraneto.net/2007/08/29/exemplos-de-prolog/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
	</channel>
</rss>

