前面说过,CLIPS是常用的人工智能语言,但是CLIPS(C Language Integrated Product System)是为嵌入到C/C++语言中设计的,对于Java程序员来说虽然可以选择Jess,毕竟用起来还要麻烦一些。JCLIPS就提供了在Java语言中直接使用CLIPS的方法。
这里是JCLIPS的主页,从这里可以下载JCLIPS的库和例子。目前只有windows版的。
假设把下载的JCLIPS的库jclips.dll和jclips.jar放到了d:\bin\jclipse,同时把样例代码JClipsExample.java和myknowledge.clp也放到这个目录,在这个目录下对样例代码进行编译:
|
javac -classpath d:\bin\jclips\jclips.jar JClipsExample.java D:\bin\jclips>java -cp .;jclips.jar -Djava.library.path=. JClipsExample
JClips version 1.2 (CLIPS version 6.22)
Firing rule assert-result
Firing rule send-result
Message received: The answer to life, the universe and everything! Firing rule do-rest
D:\bin\jclips> |
很简单,是不是?其实JCLIPS只是提供了一个JClips对象,这个对象简单的封装了CLIPS的命令接口,我们只要象在WinCLIPS中在命令行输入命令一样调用JClips的接口就行了。
这里是样例代码。
|
import java.io.File; import java.io.FileNotFoundException; import java.net.URI; import java.net.URL; import java.util.Observable; import java.util.Observer; import jclips.JClips;
public class JClipsExample implements Observer {
private static final String KNOWLEDGE_FILE = "myknowledge.clp";
public void update(Observable jClips, Object messageObj) { String message = (String) messageObj; System.out.println("Message received: " + message); }
public static void main(String[] args) { System.out.println(JClips.getVersion());
JClips jClips = JClips.getInstance(); jClips.init(); jClips.addObserver(new JClipsExample());
try { URL fileUrl = JClipsExample.class.getResource(KNOWLEDGE_FILE); if (fileUrl == null) { throw new FileNotFoundException(KNOWLEDGE_FILE); } File file = new File(new URI(fileUrl.toString())); jClips.load(file.getPath()); jClips.reset(); jClips.run(); jClips.executeCommand("(assert (do-rest))"); jClips.run(); //jClips.commandLoop(); } catch (Exception e) { e.printStackTrace(System.err); } jClips.deallocate(); } }
|