Now that we have learned the basics of CLIPS, we need to interface CLIPS source code with C++. Doing so will allow us to easily control our CLIPS program and let us provide easier input and output for CLIPS.
The user must first install the packages mentioned in the previous post, as the are necessary to support certain features of the clipsmm package. Once this is done, we can download the clipsmm package from the sourceforge link here: http://sourceforge.net/projects/clipsmm/files/latest/download.
Change your directory to where the file was downloaded and extract the files. Once this is done, we must cd into the folder and perform the following commands:
Now, the ./configure command will not work unless if the version of CLIPS used is 6.30 or higher. If you happen to be using an older version, download version 6.30 here.
With the proper version of CLIPS installed, we can change directories back to our
clipsmm folder, and again type the following commands:
./configure make sudo make install
Once this has successfully been done, we have installed the
clipsmm C++ interface. To test if it works, change directories to the
clipsmm-0.3.4/examples/facts path and type the following commands:
make clean make cd facts ./facts_simple
If you do not see an error, congrats!
clipsmm now works on your machine. If you encounter something like “
libclips.so.2: cannot open shared object file: No such file or directory“, the system cannot find the dynamically linked library. To fix this, add the following commands to
.bashrc in your home directory:
and then re-run the shell script by:
The program should now execute.
Writing Your Own Program
We can load CLIPS source code into a C++ program using
enviroment.load("filename.clp"). From this, we can access various information from the CLIPS program using the
clipsmm built-in commands, such as
environment.get_facts() returns the initial fact in the fact-list, and using the
.next() method we can access the next fact, etc. in the form of a linked-list. We can access the data in each fact by using the
slot_names() method, which returns a vector of strings with each argument in the fact.
The example code given uses “If <statement A>, then <statement B>” sentences as input, and outputs all possible if/then statements upon a ‘print’ command, is available here. The CLIPS source code is contained in the
ifthen.clp file, and the C++ interface is contained in the
Here is an example use of the program:
$ make $ sudo make install $ ./facts_simple Please enter "If <cause>, then <effect>" statements.Type "exit" when finished. Type "print" to display all statements. >If A, then B >If B, then C >If C, then D >print If A, then B If B, then C If C, then D If B, then D If A, then D If A, then C >exit $
The source code can be found here: https://www.dropbox.com/sh/ds5f9ns4kj9jynz/AABUi_R5d6SIJ_owT4sE4sI9a?dl=0.