I did not change a single line of Mikhail’s code and I have been using it everyday since 2010. I simply added a few constants.
I have also used it with Linux with success (replacing ‘libswipl.dll’ by external ‘libpl.so’). Once, in 2010.
I use FreePascal/Lazarus, Swi Prolog and Yap.
Data passed from Pascal to Swi :
strings, widestrings, numbers.
Data passed from Swi to Pascal :
atoms, strings, numbers, lists of atoms or strings.
I never, never use non deterministic calls of predicates from Pascal (PL_Retry). I use findall and the like in Prolog, gather the data into lists of atoms and pass them to Pascal.
The software is a tutorial system to help students in a situation of resolution of problems of demonstration and construction in plane Geometry.
Lazarus is used to build the graphical interface and both Prologs for the 3 inference engines. Data are huge. “Simple” geometry problems usually amount to the production of tens of thousands of facts. Half a million is not rare.
Speed is the main concern… absolutely. The C interface is much faster than the use of sockets but I also use some sockets.
I have made a few tools along these years that may be useful. They are tightly connected with my needs though. Perhaps I could make some examples out of them.