我正在构建一个名为Tijari的纸牌游戏(使用40张西班牙牌牌,非常类似Bridge)作为一个专家系统。这都是我博士论文的一部分。
我很难在Prolog代码和Java代码之间找到一个很好的平衡,什么地方去,为什么去。这款游戏必须让人类玩家同时对抗AI,这样你就可以有一支(人+ AI)和(AI + AI)或者(人+人) vs (人+人)的团队,或者两者之间的任何东西。
虽然Prolog被定义为是关于事实和规则的,但我看到的大多数用法实际上并不是所谓的逻辑编程,而是在语言的约束和复杂的条件下,试图实现有时复杂的算法的笨拙编程:洗牌、搜索和复杂的列表操作。为什么?
像Java这样的语言不能很容易地提供Prolog的一些用途,比如根据现有的规则和事实以及查询信息的能力进行推断,但是,我似乎通常无法证明它的使用是合理的。
是因为它在逻辑中编码了领域知识吗?由于回溯、剪切和递归,任何真实的Prolog程序似乎都比普通的Java代码更难阅读。
难道它不需要软件开发人员对领域知识进行编码,仅仅是一个领域专家吗?其实,你还需要一个精通Prolog的领域专家。
是因为您可以轻松地修改规则和事实而不需要重新编译吗?好吧,任何脚本语言都能提供这一点。
这是一个事实,它可以很容易地演变,随着领域知识的发展?好吧,我相信领域知识并没有那么多的进化成为一个问题,当它出现的时候,软件就会跟进,这就是为什么它一直是这样的。
老实说,我很难证明使用Prolog作为必须构建专家系统(这里还有一个游戏)的唯一语言,而当它不是,当您最终使用Java和Prolog的组合时,行在哪里呢?
谢谢
发布于 2016-06-03 20:24:00
我认为你的问题是一个非常好和合理的问题,我也非常肯定,它将很快结束,因为许多其他有趣和值得的Prolog问题已经是。
因此,我试图在仍有可能的情况下仓促回答。
首先,我想指出的是,许多Prolog程序目前确实比它们更尴尬。其中一个原因是,现有的教材有时落后于语言的现状几十年。因此,在过去的几十年中,许多非常重要的声明性特性在许多系统中得到了广泛的应用,这些特性很简单,不为很大一部分Prolog程序员所知。有了这些特性,许多Prolog程序就不再那么尴尬了。
这两种语言的一个重要区别在于我的经验:与用Prolog编程相比,编写Java代码非常不方便。在您的最初几个重要的Prolog程序之后,原因立即变得显而易见:在Java中,您始终觉得离实际任务至少有一步之遥。你不能简单地写下术语、状态、知识等等。不,你必须首先写下知识本身的元描述(以类、类型、接口的形式),然后你才能谈论你真正想要的东西。但这并不是全部:对实际知识及其属性的描述都是极低的。例如,您不能方便地通过模式匹配来对事物进行象征性的推理。
在我看来,Java本质上所需要的这种相当间接的编程方式所带来的好处是值得怀疑的。至少我还没有看到一个Java程序,我可以直截了当地说:“是的,Java是这个项目的一个很好的选择。”相比之下,我看到了很多Prolog程序,其中Prolog无疑是项目的一个很好的选择。
还有许多不同之处使得用Prolog编程比用Java编程要方便得多。例如:
这些只是我想提到的几个例子。总的来说,我认为如果您将Java视为一种“通用”编程语言,那么Prolog肯定也属于这一类。至少我还没有看到有人说:“如果我们能用Java来完成这个任务,那就太好了!”我已经听过几次关于Prolog的话了。
https://stackoverflow.com/questions/37620955
复制相似问题