<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>prolog / Drkcore</title><link>http://blog.kzfmix.com/prolog</link><description>Programming, Music, Snowboarding</description><language>ja</language><lastBuildDate>Thu, 29 Jan 2009 20:20:51 +0919</lastBuildDate><item><title>AI::Prolog</title><link>http://blog.kzfmix.com/entry/1233226132</link><description>&lt;p&gt;perlの実装で&lt;a href="http://search.cpan.org/perldoc?AI::Prolog"&gt;AI::Prolog&lt;/a&gt;というのがあるが、インストールするとaiprologというコマンドがついてくる。&lt;/p&gt;
&lt;p&gt;階乗を計算してみる。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nf"&gt;fact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;span class="nf"&gt;fact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;X&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;Sum&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:-&lt;/span&gt;
    &lt;span class="nv"&gt;X&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;X1&lt;/span&gt; &lt;span class="o"&gt;is&lt;/span&gt; &lt;span class="nv"&gt;X&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;fact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;X1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;Sum1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nv"&gt;Sum&lt;/span&gt; &lt;span class="o"&gt;is&lt;/span&gt; &lt;span class="nv"&gt;X&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nv"&gt;Sum1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;aiprologを起動&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;$ &lt;span class="n"&gt;aiprolog&lt;/span&gt; &lt;span class="n"&gt;fact&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;swi&lt;/span&gt;

&lt;span class="n"&gt;Welcome&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;AI&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Prolog&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; 0&lt;span class="p"&gt;.&lt;/span&gt;740
&lt;span class="n"&gt;Copyright&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 2005&lt;span class="o"&gt;-&lt;/span&gt;2006&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Curtis&lt;/span&gt; &amp;quot;&lt;span class="n"&gt;Ovid&lt;/span&gt;&amp;quot; &lt;span class="n"&gt;Poe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;AI&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Prolog&lt;/span&gt; &lt;span class="n"&gt;comes&lt;/span&gt; &lt;span class="n"&gt;with&lt;/span&gt; &lt;span class="n"&gt;ABSOLUTELY&lt;/span&gt; &lt;span class="n"&gt;NO&lt;/span&gt; &lt;span class="n"&gt;WARRANTY&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;  &lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;library&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;free&lt;/span&gt; &lt;span class="n"&gt;software&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt; &lt;span class="n"&gt;redistribute&lt;/span&gt; &lt;span class="n"&gt;it&lt;/span&gt; &lt;span class="n"&gt;and&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;or&lt;/span&gt; &lt;span class="n"&gt;modify&lt;/span&gt; &lt;span class="n"&gt;it&lt;/span&gt; &lt;span class="n"&gt;under&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;same&lt;/span&gt; &lt;span class="n"&gt;terms&lt;/span&gt; &lt;span class="n"&gt;as&lt;/span&gt; &lt;span class="n"&gt;Perl&lt;/span&gt; &lt;span class="n"&gt;itself&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;

&lt;span class="n"&gt;Type&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;help.&amp;#39;&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;built&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ins&lt;/span&gt; &lt;span class="n"&gt;or&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;help(&amp;quot;$builtin&amp;quot;).&amp;#39;&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;help&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;specific&lt;/span&gt; &lt;span class="n"&gt;built&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;in&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;

?&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;fact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;10&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;

&lt;span class="n"&gt;fact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;10&lt;span class="p"&gt;,&lt;/span&gt; 3628800&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;Yes&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;prologをいじってると宣言的ってのが「あーこういうことなのね」ってのがわかって楽しい。On LispでCommon Lispで実装するPrologとか読んである（継続とパターンマッチング）と内部でこういうことしてんのかなとか推測できるし。&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274066371/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/41PR3HVafyL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;On Lisp&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    ポール グレアム&lt;br /&gt;
    オーム社 / 3990円 ( 2007-03 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;あとで&lt;a href="http://blog.kzfmix.com/entry/1195390517"&gt;HOPの9章&lt;/a&gt;の宣言的プログラミングのとこも読み返そう。Prologを知ってると面白く読めるのかも。&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/1558607013/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/41amviSk6nL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;Higher-Order Perl: Transforming Programs with Programs&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    Mark Jason Dominus&lt;br /&gt;
    Morgan Kaufmann / 5692円 ( 2005-03-28 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;</description><pubDate>Thu, 29 Jan 2009 20:20:51 +0919</pubDate><category>perl</category><category>prolog</category></item><item><title>macbookにswi-prologをインストール</title><link>http://blog.kzfmix.com/entry/1233144656</link><description>&lt;p&gt;初Prolog&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo port install swi-prolog
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;linuxだとplなんだけどmacだとswiplというコマンド。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;parent(kzfm,yuki).
parent(uko,yuki).
parent(ako,uko).
parent(yum,kzfm).
parent(chiyo,yum).
parent(kzfm,hana).
parent(uko,hana).
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;上のファイルをtest.swiという名前で保存しておいて、&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;swipl -f test.swi
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;で起動&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;?- parent(A,yuki).
A = kzfm ;
A = uko . 

?- parent(A,B),parent(B,yuki).
A = ako,
B = uko ;
A = yum,
B = kzfm ;
false.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;parentのparentつまり祖父母だ。もちろん再帰もできる。On Lispの言葉を借りるなら&lt;strong&gt;Prologは規則を追加したデータベース&lt;/strong&gt;だ。&lt;/p&gt;

&lt;p&gt;ということは、ミニ言語としてperlとかに組み込んであっても良さそうなものだと思って探してみたら、ズバリな記事を見つけた。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.perl.com/pub/a/2005/12/15/perl_prolog.html"&gt;Logic Programming with Perl and Prolog&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;あとで読む。&lt;/p&gt;

&lt;p&gt;今のところ入門的な内容しかやってないのでアレなんだけど、ファクトが固いというか、True,Falseからしかルールを導いてないので、もうちょっと確率的なものを扱いたい。8割くらい正しいのでTrueとかそんな感じの緩いルール。&lt;/p&gt;

&lt;p&gt;これも気になるが、なか見検索できないので躊躇している。&lt;/p&gt;

&lt;p&gt;&lt;div class="awsxom"&gt;
&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4777514021/ref=nosim/kaerutyuuihou-22"&gt;
&lt;img src="http://ecx.images-amazon.com/images/I/51sbpGAijaL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
&lt;strong&gt;Prologで学ぶAIプログラミング―「論理プログラミング」「Prolog」の入門から「人工知能」の基礎まで (I・O BOOKS)&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
赤間 世紀 &lt;br /&gt;
工学社 / ￥ 2,415 ()&lt;br /&gt;
通常2～4週間以内に発送&lt;br /&gt;
&lt;br clear="all" /&gt;
&lt;/div&gt;&lt;/p&gt;

&lt;h4&gt;追記&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://www.kohgakusha.co.jp/books/detail/978-4-7775-1402-1"&gt;これ&lt;/a&gt;見たら、この本よりも、Prolog Programming for Artificial Intelligenceを買うべきな気がしてきた。&lt;/p&gt;

&lt;p&gt;&lt;div class="awsxom"&gt;
&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/0201403757/ref=nosim/kaerutyuuihou-22"&gt;
&lt;img src="http://ecx.images-amazon.com/images/I/419EYBHD16L._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
&lt;strong&gt;Prolog Programming for Artificial Intelligence (International Computer Science Series)&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
Ivan Bratko &lt;br /&gt;
Longman Group United Kingdom / ￥ 7,091 ()&lt;br /&gt;
通常11～13日以内に発送&lt;br /&gt;
&lt;br clear="all" /&gt;
&lt;/div&gt;&lt;/p&gt;
</description><pubDate>Wed, 28 Jan 2009 21:47:52 +0919</pubDate><category>macbook</category><category>prolog</category></item></channel></rss>