我正在使用 SWI-Prolog 提供的 JPL 用 Java 编写一个应用程序,以从 Java 调用 Prolog。
我使用 Eclipse 作为 IDE。我不知道如何开始这个在网上找到的例子:
这里是java代码:
package prolog;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import jpl.Atom;
import jpl.Compound;
import jpl.Variable;
import jpl.Term;
import jpl.Query;
import jpl.JPL;
@SuppressWarnings({ "unchecked", "deprecation", "serial" })
public class JavaProlog extends JFrame {
JButton startButton = new JButton("Start");
JTextArea textArea = new JTextArea("A Diagnostic Expert System \n" +
"for respiratory diseases and lung.");
/**
*/
JavaProlog(){
Container cp=getContentPane();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocation (200,200);
setSize (300,200);
setLayout (new FlowLayout());
startButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
startDiagnose();
}
});
cp.add(textArea);
cp.add(startButton);
setVisible(true);
}
private void startDiagnose(){
Term consult_arg[] = {
new Atom( "C://Users//i_vista//workspace//mdc.pl" )
};
Query consult_query =
new Query(
"consult",
consult_arg );
boolean consulted = consult_query.query();
if ( !consulted ){
System.err.println( "Consult failed" );
System.exit( 1 );
}
}
public static void main( String argv[] ){
JPL.init();
JavaProlog jpTest = new JavaProlog();
}
如果我直接从 Prolog 运行 Prolog 程序,它工作得很好,并且当我从 Java 应用程序调用它时也是一样。
我还可以在 Eclipse 控制台中看到输出,并且可以回答问题。
但是我想构建一个Java UI用于用户和系统之间的交互,但我不知道如何从Java中的Prolog中获取代码并将其放入UI中。
例如,如何从 Java UI 捕获输入并将其传递给 Prolog 代码?
问题可能是您的 Prolog 文本不是用以下语言编写的 倒置样式,例如 Java UI 应用程序通常就是这样。
因此在单独的线程中启动 Prolog 系统。替换所有读/1和写/1 在你的 Prolog 文本中大致如下:
my_read(提示,值):- set_UI_prompt(提示),等待(信号),get_UI_value(值)。
my_write(标签,值):- set_UI_result(标签,值)。
由于也在第二个单独的线程中运行,因此在输入值时 并点击某个按钮,UI 应用程序应该通知(信号)。
或者重写专家系统的逻辑,使得推论 导致查询或答案可以在步骤中从外部调用 明智的时尚。但也建议生成一个线程,因为 推断可能需要时间。