专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > C#

请教一介谓词逻辑怎么用数据库建模和OO建模

发布时间:2011-06-21 11:32:54 文章来源:www.iduyao.cn 采编人员:星星草
请问一介谓词逻辑如何用数据库建模和OO建模
比如表示亲属关系的一介谓词定义如下:

father(x,y) : 表示 y 是x的父亲
child(x,y) : 表示 x 是y的孩子
male(y): 表示y 是男性

那么可以有如下推导:

father(x,y) -> child(y,x) AND male(y)

grandFather(x1,y) -> (child(y,x1) AND male(y) ) OR ( child(y,x1) AND female(y) )

还有一些,总共大概50多条这样的推导规则,其他的推导关系可以在这篇文章中找到。
http://wenku.baidu.com/view/b767132ced630b1c59eeb588.html

数据库的设计应该满足下面两个条件:
1. 容易实现替换,就是用右边的代替左边的。
2. 容易实现简化,就是用左边的代替右边的。
3. 可以实现还有结合律,分配律


查了下资料,貌似属于AI的范畴?
没有一点头绪。
我的目标就是要实现亲属关系的推导.

------解决方案--------------------
匹配对应的其它句子的条件部分中相同条件中的对应 --> 匹配对应的其它句子的条件部分中相同关系中的对应


你可以在“条件”class上定义自定义的运算符重载,比如将 => 这个运算重载(左边是一个关系,右边是一个个关系的param数组)了之后,变成自动产生内存对象(嵌套)结构的机制,同时在它生成结构式默认地将小写字母表示的char自定转换为“变量”对象实例,结果客户程序就可以这样写你的例子:
C# code
var net= new LogicSystem();
net.Add(new Father('x','y') => new Child('y','x'), new male('y'));
net.Add(new grandFather('x1','y') => new child('y','x1'), new male('y'));
net.Add(new grandFather('x1','y') => new child('y','x1'), new female('y'));
net.SaveToDatabase(connectionString);
var results= net.SoveGoal(new grandFather('a',"林黛玉"), new grandFather('a',"凤姐"));
foreach(var ret in results)
    Console.WriteLine("林黛玉跟凤姐的共同的祖母是{0}", ret.First(x=> x.Name=='a').Value);

------解决方案--------------------
自己实现他们难度太大了

自己的token,自己的语法树,自己的文法解析,回溯迭代,一套下来估计编译原理就可以考90分了

另外codeplex也有一个同类型开源项目 prolog.net
http://prolog.codeplex.com/
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: