Home Open Source Articles Videos AI Newsletter Contact

Sign-up for the
Amzi! Newsletter

 

Amzi! Open Source Projects

Source at GitHub/AmziLS

Details on Projects


Distribution

This repository contains the binary distributions for the projects.

Amzi! Prolog + Logic Server

This repository contains all the sources for rebuilding and maintaining Amzi! Prolog + Logic Server.

In addition to maintainance, thare are fun, relatively easy enhancements that can be made to the system. Amzi! uses a virtual machine architecture that is designed to be easily ported, and easily extended. The engine is a C++ program that has run in literally a dozen computing environments. The engine has a full C API that lets any external tools with a C interface connect to Amzi! and also implement extended predicates in that tool.

  • Ports to other operating systems. All that's required is a C++ development environment for the platform, to build the Amzi! virtual machine (WAM) for that environment. The Prolog code is all machine independent. This work involves setting up the make files for that environment, and, maybe, if necessary, some changes to the internal module that works with environment specific I/O. That last bit should not be necessary for ports to various Unix environments.
  • Interfaces. The Amzi! engine has a full C API included that is designed to make it easy to integrate Prolog with other software tools. There are many that are supported, and are included, but these could be updated, and others could be added by following the templates of the existing interfaces. These projects might either be language wrappers, such as for Java or .NET, or extensions. Examples of extensions are the modules that implement extended predicates for allowing Prolog to access MySQL, ODBC, and TclTk. These do not involve rebuilding any of the Amzi! core.
    • Language Wrappers. The C API has a rich set of functions for loading and querying Prolog code, and moving easily between the native language representation of variables and Prolog terms coming and going. These C functions can be used to implement the same functions in other languages, using the native syntax of that language. Some examples are the Java and .NET interfaces included with the system.
    • Prolog Extensions. The C API also has functions that support the creation of extended predicates in other languages. These appear to the Prolog system as internal built-in predicates. For example, the MySQL extended predicate library lets Prolog directly interact with MySQL databases using Prolog predicates that reflect the various MySQL functions. The TclTk interface does the same for TclTk.

The Amzi! Prolog + Logic Server project is composed of three sub-projects:

  • APLS - The core system, engine, listener, compiler, runtime
  • Interfaces - A project with subdirectories for various external interfaces, such as Java, .NET, MySql, TclTk...
  • IDE - An Eclipse project for building the Eclipse plug-in for Amzi! Prolog, including the four-port graphical debugger.

For details, see the devdocs directory in the apls project.

Prolog Course

Slides, exercises and sample code for a Prolog course taught by Amzi! in numerous commercial establishments.

The courses were derived from the approach taken to teaching Prolog used in Adventure in Prolog. Over time the samples changed from an interactive fiction game to an airline reservation system. Somehow a boring business system seemed better than a fun game.

And besides, the first company hiring me to teach Prolog was doing exactly that. Their system went on to be the basis of the scheduling software in a number of today's commercial airline sites, and as such was a great example of what can be done with Prolog.

KnowledgeWright

KnowledgeWright was one of my favorite Amzi! products. It brought together many of the features I felt made Prolog such a powerful tool for knowledge engineering. That is, Prolog is a fantastic language for creating other languages and reasoning engines.

There is discussion on the merits of domain specific languages. The advantage is you have a language for specifying knowledge that fits well with the domain, making development and maintenance much easier. The down side is you have a specialized tool to maintain as well.

With Prolog it is relatively easy to create domain specific languages, so that the cost of doing so is much less than with other tools.

KnowledgeWright uses Prolog to create a framework for knowledge engineering languages. It includes a basic syntax for specifying knowledge, and a reasoning engine for reasoning over that knowledge. Both are highly customizable, and there are samples showing this. A customization is called a 'jig'.

The naming of KnowledgeWright was part of it's appeal. A 'wright' is one who crafts things, like a wheel wright. A jig is a specialized tool for building a specific sort of thing. So there can be jigs for support applications, or sales, or whatever.

For whatever reason, KnowledgeWright was never a huge commercial success, but it continues to have users around the globe. For those who are interested in taking this tool further, or working with it more, here it is. If you have any questions about it, well it's been a long time since this code was written, but feel free to ask.

The current distribution of KnowledgeWright was developed on Windows, but the system is all Java and Prolog and not dependent on Windows. The open source project could be easily modified to run on other platforms.