This file documents the changes introduced in the 4.1 Amzi! release. The **'d items may require source code changes.
Java 1.1 Support - The Java Class now supports version 1.1 of the JDK. It also includes the ability to extend Amzi! Prolog with predicates implemented via Java methods.
Delphi 3.0 Support - The Delphi Component has been upgraded to work in a package for version 3.0 and the extended predicate support has been modified to support version 3.0. All the Delphi samples have been upgraded to 3.0, and the Prolog Expert System (ProXS) and Sports Scheduler (SSched) have been added.
Visual Basic 5.0 and Extended Predicate Support - The VB module now supports extended predicates so that Amzi! Prolog modules can call functions written in VB 5.0. A sample demonstrating this has been added, and the remaining VB samples have been upgraded to 5.0.
Visual C++ 5.0 Support - The C++ samples and workspaces have been upgraded to version 5.0.
Multifile and Discontiguous Support - It is no longer required to have all of the clauses for a compiled predicate to be either discontiguous or in the same file. This applies both to consulted source files and loaded compiled files.
PLM Unload - It is now possible to unload all the clauses previously loaded from a PLM file.
Removed Support for WinCGI ** - The CGI interface has been greatly simplified by removing support for the Windows CGI quasi-standard in favor of the widely support Standard CGI interface.
Projects Use Relative Pathnames - Prolog projects now use relative pathnames for files located in or below the project directory. This makes them much each to move to other computers.
Strings and Atoms Unify with Each Other - A term containing strings that have the same values as atoms in another term will unify. This makes it easier to interface with databases using ODBC.
Visual Basic Functions Return True/False ** -Functions that return true/false in the Logic Server interface are now declared as booleans instead of integers.
ODBC Bug Fixes -
Operator Precedences Conform to ISO Standard - The precedences of Prolog operators in Amzi! now match the ISO standard. This affects the following operators: - ** @ : \.
The VB module now supports extended predicates so that Amzi! Prolog modules can call functions written in VB 5.0. The VB module now includes functions for definining and implementing extended predicates. A simple example is given in SAMPLES/VB/EXTPRED.
The ISO standard defines two directives that can be used to let the compiler know that the clauses of a predicate are discontiguous in the same file and/or that the clauses of a predicate might be defined in multiple files. The directives are discontiguous and multifile. As far as the Amzi! compiler is concerned, it does the same work for either directive, so the two may be used interchangably, and it is not necessary to use both for predicates whose clauses are both discontiguous and multifile. However, both directives are supported for compatibility with the ISO standard and other Prolog that support both.
For example, if the clauses of the predicate duck/1 are discontiguous within a file, then add the directive:
:- discontiguous duck/1.
If you want to define the duck/1 predicate in other files, then each file should have the directive:
:- multifile duck/1.
This feature is especially useful for those situations where you might have multiple source files defining the same predicate for different situations. These can be separately compiled and the PLM files loaded on demand by the main application.
The CGI interface has been greatly simplified by removing support for the Windows CGI quasi-standard in favor of the widely support Standard CGI interface. Also, the Standard CGI variable names have been adopted. This means all Prolog scripts that reference those variables will need to be updated, or you can #define WINCGI_NAMES in AMZICGI.C to use the same Windows CGI variables names that were used previously.
Functions that return the special VB value 'True' or 'False' are now declared as booleans instead of integers. If your code follows these conventions, no changes will be needed. If you use '1' and '0' instead, those values will need to be changed to 'True' and 'False'.