kar*_*thi 1 java prolog tuprolog
我下载了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).
Run Code Online (Sandbox Code Playgroud)
我需要处理这种关系,并在java中再次处理输出
谁能告诉我如何整合prolog和java?
编辑:我通过实现代码在tuprolog中得到此错误
此代码适用于associatedWith(X,Y).即使用2个参数,但是当我给出3个与(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
Run Code Online (Sandbox Code Playgroud)
您需要在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"));
}
Run Code Online (Sandbox Code Playgroud)
如果您的查询可能产生多个解决方案,请使用while循环来测试打开的选择点的存在,Prolog.hasOpenAlternatives并检索另一个解决方案Prolog.solveNext.
手册中的第8章(您应该在doc任何tuProlog发行版的子目录中找到的PDF文件)包含许多关于从Java代码与Prolog交互的复杂性日益增加的小例子(特别参见第8.4节).
| 归档时间: |
|
| 查看次数: |
909 次 |
| 最近记录: |