﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-kooyee ‘s blog-随笔分类-AI</title><link>http://www.blogjava.net/Javawind/category/28033.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 12 Dec 2007 06:46:14 GMT</lastBuildDate><pubDate>Wed, 12 Dec 2007 06:46:14 GMT</pubDate><ttl>60</ttl><item><title>Horn Clause</title><link>http://www.blogjava.net/Javawind/archive/2007/12/12/167108.html</link><dc:creator>kooyee</dc:creator><author>kooyee</author><pubDate>Tue, 11 Dec 2007 23:30:00 GMT</pubDate><guid>http://www.blogjava.net/Javawind/archive/2007/12/12/167108.html</guid><wfw:comment>http://www.blogjava.net/Javawind/comments/167108.html</wfw:comment><comments>http://www.blogjava.net/Javawind/archive/2007/12/12/167108.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Javawind/comments/commentRss/167108.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Javawind/services/trackbacks/167108.html</trackback:ping><description><![CDATA[<div class="postTitle"><a href="http://my.donews.com/chenz/2006/04/23/horn-clause/" rel="bookmark">Horn Clause</a></div>
<div class="postText">
<p>一个clause形如<br />
B1，B2, &#8230;, Bm &gt;- A1, A2, &#8230;, An</p>
<p>如果A1, A2, &#8230;, An同时成立，那么可以导出B1或B2，&#8230;, 或Bm<br />
A之间是and的关系，B是or的关系。</p>
<p>如果X是Z的父母，且Z是Y的父母，那么X是Y的祖父母<br />
grandparent(X, Y) &gt;- parent(X, Z), parent(Z, Y).</p>
<p>不能导出结论，good和bad不可能同时成立<br />
&gt;- good(X), bad(X).</p>
<p>如果X是人，那么X或者为男性，或者为女性<br />
male(X), female(X) &gt;- human(X).<br />
可以看出，一个clause可以导出多个结论。如果一个clause最多只导出1个结论，那么这种clause就称为horn clause。逻辑学家Alfred Horn提出了这样一个概念，便于进行逻辑推理。</p>
<p><br />
<br />
horn clause又分两种:<br />
像grandparent这样的，只有一个结论，m=1，称为headed horn clause, 形如<br />
B &gt;- A1, A2, &#8230;, An</p>
<p>像第二个例子那样的，没有任何结论，m=0， 称为headless horn clause, 形如<br />
&gt;- A1, A2, &#8230;, An<br />
<br />
<br />
prolog程序主要是由3种horn clauses构成的。</p>
<p>Facts 总是成立的事实，是所有推理的基础。此时，由于不需要任何的An，所以n=0. 形如 B :-&nbsp; 简写为 B<br />
&#8216;:-&#8217;是prolog里面的推理符号，相当于 &#8216;&gt;- &#8216;.</p>
<p>Rules是自定义的推理规则，它基于facts，相当于定义了一套推理的辅助工具。形如 B :- A1, A2, &#8230;, An<br />
可知看出，以上两种为headed horn clause。</p>
<p>Querys 是headless的horn clause. 形如 :- A1, A2, &#8230;, An&nbsp; , 通常写为 ?- A1, A2, &#8230;, An<br />
&#8216;?-&#8217;表示查询，<a href="http://www.swi-prolog.org/">swi prolog</a>的提示符即是这个，说明prolog默认一直处于查询状态。<br />
只有当A1, A2, &#8230;, An都成立时，query的结果才为 true。</p>
<p><br />
<br />
<br />
参考：<br />
A PROLOG Database System, Deyi Li Ph.D.&nbsp;,&nbsp; Department of Computer Science, Heriot-Watt University, Edinburgh, UK, 1984</p>
</div>
<img src ="http://www.blogjava.net/Javawind/aggbug/167108.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Javawind/" target="_blank">kooyee</a> 2007-12-12 07:30 <a href="http://www.blogjava.net/Javawind/archive/2007/12/12/167108.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>