我下载了tuprolog,但我无法获得以下查询的结果,而我在PROL ide中得到了答案。有人能帮帮忙吗?
verb(admit-1).
verb(work-4).
nsubjpass(admit-1, patient-2).
agent(admit-1, doctor-3).
nsubj(work-4, who-5).
aux(work-4, be-6).
rcmod(doctor-3, work-4).
prep_in(work-4, clinic-7).
aggregation('part of').
aggregation('belongs to').
aggregation('subdivision of').
aggregation('have').
aggregation('contain').
aggregation('comprise').
aggregation('include').
aggregation('define').
aggregation('consist of').
aggregation('compose of').
aggregation('denote by').
aggregation('identify by').
aggregation('make up of').
aggregation('record with').
attribute('have').
attribute('contain').
attribute('comprise').
attribute('include').
attribute('define').
attribute('consist of').
attribute('compose of').
attribute('denote by').
attribute('identify by').
attribute('make up of').
attribute('record with').
generalization('be').
generalization('kind of').
generalization('type of').
generalization('classify into').
generalization('consider').
object(X) :- noun(X).
relation(X) :- verb(X).
rel(X,Y) :- nsubjpass(X,Y).
rel(X,Y) :- agent(X,Y).
rel(X,Y) :- nsubj(X,Y).
rel(X,Y) :- aux(X,Y).
rel(X,Y) :- rcmod(X,Y).
rel(X,Y) :- prep_in(X,Y).
associatedWith(X,Y) :- rel(X,Y).
associatedWith(X,Y,Z) :- verb(Y),associatedWith(X,Y), associatedWith(Y,Z).
associatedWith(X,Y,Z) :- verb(X),associatedWith(X,Y), associatedWith(X,Z).
rel_aggregation(X,Y,R):-rel(X,Y).aggregation(R).
?- associatedWith(X,Y,Z).我需要处理这些关系,并让输出在java中再次处理。
谁能告诉我如何集成prolog和java?
编辑:我通过实现以下代码在tuprolog中得到了这个错误
此代码适用于associatedWith(X,Y)。也就是说,有两个参数,但当我给出三个参数associatedWith(X,Y,Z)时就不起作用了。该怎么做..请帮助我得到这个异常
java.lang.ClassCastException: alice.tuprolog.Var cannot be cast to alice.tuprolog.Struct
at alice.tuprolog.lib.BasicLibrary.agent_2(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at alice.tuprolog.PrimitiveInfo.evalAsPredicate(Unknown Source)
at alice.tuprolog.StateGoalEvaluation.doJob(Unknown Source)
at alice.tuprolog.Engine.run(Unknown Source)
at alice.tuprolog.EngineManager.solve(Unknown Source)
at alice.tuprolog.Prolog.solve(Unknown Source)
at javaapplication9.Main.main(Main.java:26)
Exception in thread "main" alice.tuprolog.NoSolutionException
at alice.tuprolog.SolveInfo.getSolution(Unknown Source)
at javaapplication9.Main.main(Main.java:28)
Java Result: 1发布于 2010-09-18 18:49:38
在Java语言中,您需要处理的主要tuProlog对象是:Theory,可用于表示Prolog程序;Prolog,即您将向其发出查询请求的解释器;以及SolveInfo,包含解释器找到的每个解决方案的数据。
假设您的Prolog程序(即除了最后一行之外的所有代码)都包含在一个名为theory.pl的文件中。粗略地说(即模数导入和异常),您需要遵循的过程类似于:
Prolog engine = new Prolog();
Theory theory = new Theory(new FileInputStream("theory.pl"));
engine.setTheory(theory);
SolveInfo solution = engine.solve("associatedWith(X, Y, Z).");
if (solution.isSuccess()) {
System.out.println(solution.getTerm("X"));
System.out.println(solution.getTerm("Y"));
System.out.println(solution.getTerm("Z"));
}如果您的查询可能产生多个解决方案,请使用while循环通过Prolog.hasOpenAlternatives测试开放选择点的存在,并使用Prolog.solveNext检索另一个解决方案。
手册中的第8章(你可以在任何tuProlog发行版的Prolog子目录中找到)包含了许多关于从doc代码中与Prolog子目录交互的复杂性增加的小示例(特别参见第8.4节)。
发布于 2010-09-18 22:41:05
agent/2是tuProlog中的内置谓词-您可以尝试重命名您的版本。
https://stackoverflow.com/questions/3741152
复制相似问题