<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://cygal.info/blog/index.php/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>Dissidents - IA</title>
  <link>http://cygal.info/blog/index.php/</link>
  <description></description>
  <language>fr</language>
  <pubDate>Tue, 01 Apr 2008 21:56:24 +0200</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>« Ca ne marchera pas ...</title>
    <link>http://cygal.info/blog/index.php/post/Ca-ne-marchera-pas</link>
    <guid isPermaLink="false">urn:md5:dfc82c01f9845324d0d87dc8ec15a362</guid>
    <pubDate>Mon, 05 Nov 2007 16:16:00 +0100</pubDate>
    <dc:creator>Dark-Side</dc:creator>
        <category>Algo</category>
        <category>IA</category><category>prolog</category><category>sex</category>    
    <description>... Vous savez pourquoi ? Parce que ça nous amuse. Vous trouvez quelque chose pour m’emmerder, je trouve quelque chose pour vous emmerder. C’est un jeu et je vais gagner. J’ai un coup d’avance. Vous êtes déjà emmerdé. »&lt;br /&gt;&lt;ins&gt;&lt;strong&gt;Edité le 25/12/07&lt;/strong&gt;&lt;/ins&gt;&lt;br /&gt;    Je crois que je vais faire comme ça désormais, toujours commencer mes articles par une citation sans rapport (ou du moins sans rapport logique apparent).&lt;br /&gt;
Bref, je suis là parce que j'avais dis que je vous montrerai une IA en &lt;strong&gt;&lt;em&gt;prolog&lt;/em&gt;&lt;/strong&gt;. Donc voilà je vais vous en montrer une.&lt;br /&gt;
Pour qu'on soit d'accord tout de suite : &lt;ol&gt;&lt;li&gt;oui le code est sale&lt;/li&gt;
&lt;li&gt;oui je m'en fous&lt;/li&gt;
&lt;li&gt;non je n'accepterai aucune remarque&lt;/li&gt;
&lt;/ol&gt;
Bien. Ceci mis au clair, voici le code : &lt;pre&gt;est_vainqueur(papier, pierre).&lt;br /&gt;est_vainqueur(pierre, ciseaux).&lt;br /&gt;est_vainqueur(ciseaux, papier).&lt;br /&gt;&lt;br /&gt;corres(pierre, 1).&lt;br /&gt;corres(papier, 2).&lt;br /&gt;corres(ciseaux, 3).&lt;br /&gt;&lt;br /&gt;corresp(perdu, 0).&lt;br /&gt;corresp(nul, 1).&lt;br /&gt;corresp(gagne, 2).&lt;br /&gt;&lt;br /&gt;same(X, X).&lt;br /&gt;&lt;br /&gt;plus_joue([Papier,Pierre,Ciseaux], X) :- Pierre &amp;gt;= Papier, Pierre &amp;gt;= Ciseaux, same(X, pierre).&lt;br /&gt;plus_joue([Papier,Pierre,Ciseaux], X):- Pierre =&amp;lt; Papier, Papier &amp;gt;= Ciseaux, same(X, papier).&lt;br /&gt;plus_joue([Papier,Pierre,Ciseaux], X) :- Ciseaux &amp;gt;= Papier, Pierre =&amp;lt; Ciseaux, same(X, ciseaux).&lt;br /&gt; &lt;br /&gt;traiter(perdu, pierre, [Papier, Pierre, Ciseaux], X) :- P is Papier + 1, same(X, [P,Pierre, Ciseaux]).&lt;br /&gt;traiter(perdu, ciseaux, [Papier, Pierre, Ciseaux], X) :- P is Pierre + 1, same(X, [Papier,P, Ciseaux]).&lt;br /&gt;traiter(perdu, papier, [Papier, Pierre, Ciseaux], X) :- C is Ciseaux + 1, same(X, [P,Pierre, C]).&lt;br /&gt; &lt;br /&gt;traiter(nul, papier, [Papier, Pierre, Ciseaux], X) :- P is Papier + 1, same(X, [P,Pierre, Ciseaux]).&lt;br /&gt;traiter(nul, pierre, [Papier, Pierre, Ciseaux], X) :- P is Pierre + 1, same(X, [Papier,P, Ciseaux]).&lt;br /&gt;traiter(nul, ciseaux, [Papier, Pierre, Ciseaux], X) :- C is Ciseaux + 1, same(X, [P,Pierre, C]).&lt;br /&gt; &lt;br /&gt;traiter(gagne, ciseaux, [Papier, Pierre, Ciseaux], X) :- P is Papier + 1, same(X, [P,Pierre, Ciseaux]).&lt;br /&gt;traiter(gagne, papier, [Papier, Pierre, Ciseaux], X) :- P is Pierre + 1, same(X, [Papier,P, Ciseaux]).&lt;br /&gt;traiter(gagne, pierre, [Papier, Pierre, Ciseaux], X) :- C is Ciseaux + 1, same(X, [P,Pierre, C]).&lt;br /&gt; &lt;br /&gt;alea(X) :- random(1,4, X).&lt;br /&gt;&lt;br /&gt;stat(Coups, Nb) :- &lt;br /&gt;	plus_joue(Coups, Adv),&lt;br /&gt;	est_vainqueur(Coup, Adv),&lt;br /&gt;        corres(Coup, Nb).&lt;br /&gt;&lt;br /&gt;jouer(Coups, X) :- &lt;br /&gt;	random(1, 11, Al),&lt;br /&gt;	(Al =:= 1 -&amp;gt; alea(Nb);&lt;br /&gt;	stat(Coups, Nb)),&lt;br /&gt;	write(Nb), nl,&lt;br /&gt;	write('Gagné, nul ou perdu ?'), nl,&lt;br /&gt;	read(Score),&lt;br /&gt;	corresp(S, Score),&lt;br /&gt;	traiter(S, Coup, Coups, X).&lt;br /&gt;&lt;br /&gt;boucle(Coups) :-&lt;br /&gt;	jouer(Coups, N_coups),&lt;br /&gt;	write('1 pour rejouer, 0 pour arreter.'), nl,&lt;br /&gt;	read(X),&lt;br /&gt;	X =:= 1,&lt;br /&gt;	boucle(N_coups).&lt;br /&gt;	&lt;br /&gt;init :- boucle([0,0,0]).&lt;/pre&gt;
&lt;br /&gt;
Naturellement je vais faire quelques remarque, alors il faut savoir que c'est mon premier code en prolog, c'est pour ça qu'il est sale. Ensuite : ce code est surement optimisable (surtout au niveau des fonctions &lt;em&gt;traiter&lt;/em&gt;) mais ce n'est pas important, ce qu'il faut voir c'est que même si ce code est un peu plus long qu'un code OCaml bien optimisé il est quand même bien plus facile à comprendre par un non initié. Et c'est &lt;strong&gt;ça&lt;/strong&gt; l'important !
&lt;br /&gt;&lt;br /&gt;
Voilà, bonne journée !</description>
    
    
    
          <comments>http://cygal.info/blog/index.php/post/Ca-ne-marchera-pas#comment-form</comments>
      <wfw:comment>http://cygal.info/blog/index.php/post/Ca-ne-marchera-pas#comment-form</wfw:comment>
      <wfw:commentRss>http://cygal.info/blog/index.php/feed/rss2/comments/42</wfw:commentRss>
      </item>
    
</channel>
</rss>