A GUIDE TO CONVERTING ESP PROGRAMS TO CESP PROGRAMS


ESP (Extended Self-contained Prolog) is an object-oriented logic programming language that was developed by ICOT. ESP can run only on a PSI that is an ESP machine. On the other hand, AI Language Research Institute, Ltd. (AIR) extended ESP, and developed CESP (Common ESP) so that it can be used on UNIX machines. This document shows several general points to be noted when converting ESP programs to CESP programs. This document is written with the aid of AIR.

1. CESP

CESP is not part of the ICOT Free Software, instead being available from MITSUBISHI ELECTRIC COMPUTER SYSTEMS(TOKYO) CORP. (MTC).

CESP Ver.3.3 assumes the following environment.

    Computer         : SUN4 (SPARC)
    Operating System : Sun OS R4.0.3, R4.1, R4.1.1 or R4.1.2
    Main Memory      : 16MB or more (Swap size is 64MB)
    Disk Storage     : 90MB or more for SUN4 (SPARC)
    Editor           : Interactive debugging environment installed 
                       on GNU Emacs (preferred)
    Window           : Available X11R4 interface / Japanese characters
                       with Xmw (for X11R5) and Wnn (R4.0.2)

For further details, apply to MTC by Fax or Postal mail.

    MITSUBISHI ELECTRIC COMPUTER SYSTEMS CORP.
    2-nd Application Systems Develpment Dept.
    Software Products Promotion Group

    87-1, Kawakamicho, Totsukaku, Yokohama,
    Kanagawa 244, Japan

    TEL:  +81-45-825-5679(Japanese Only)
    FAX:  +81-45-825-5822

2. Conversion to CESP

Many ESP programs need a PSI machine and SIMPOS (the OS of PSI). When you convert such programs to CESP programs, one task is to rewrite the incompatible segments such as I/O part. Some fundamental data forms of CESP are different from those of ESP. Read the CESP Language Manual [1] first. Some general points of conversion are as follows:

(1) Built-in predicates

(a) Built-in predicates for PSI
You must rewrite the part of the program (e.g., built-in predicates such as "word", "set_system_register" or "address") that depends on the PSI hardware (e.g., register, 40bits/word).

(b) Differences in built-in predicates of CESP and ESP
The predicates of ESP, "heap_vector" and "stack_vector", correspond to "impure_vector" and "pure_vector" in CESP. Read [1] to learn the differences in CESP and ESP built-in predicates.

(c) Standard operators of CESP
Some special symbols such as "&" and "**" are used as standard operators in CESP but not in ESP. Before you can declare "add_op" of such operators in CESP, you must declare "remove_op" of them.

(2) Data form

(a) Data form of string
Although 1 bit string data and 32 bit string data are available in ESP, they are not available in CESP. Use "impure_vector" instead in CESP.
(b) Range of integer
While the range of the integer in ESP is from -2^31 to 2^31-1, that in CESP is from -2^28 to 2^28-1.
(c) Character code
While the character code in ESP is JIS (Japanese Industrial Standard; JIS X 0208-1983), that in CESP is EUC.
(d) Comparison of different data type
Data types are compared differently in CESP and ESP.

(3) Interface

(a) Window methods
The window in CESP is different from that in ESP. In particular, the emacs_window in CESP is different from the pmacs_window in ESP. (You can use the "scrollbar" instead of the pmacs_window.) The macros for the mouse in ESP (e.g., mouse#r) must be changed to the atoms in CESP (e.g., 'mouse#r'). You can not use the extra PSI font on UNIX machines.
(b) File I/O methods
The file I/O methods in CESP are a little different from those in ESP. For example, the order of arguments in the ":create" method is different.
(c) Method for library and directory etc.
Some methods for the library and directory etc. in ESP are not in CESP. You need to program the difference.

(4) Others

(a) Capacities of PSI and UNIX machine
The UNIX machine and the ESP machine differ as follows: the execution speed of CESP on the UNIX machine is slower than ESP on PSI, and the UNIX machine does not have as much memory as PSI. If a class has many clauses, you should divide the class.
(b) Exception manipulation
- set_mode exception_fail/exception_handler
You can set these in CESPshell. You can choose for the CESP system to manipulate exception as failure, or for the system to show a manipulation menu when an exception occurs.
- set_exception_object/2
You can designate any class to be called when an exception occurs. The method in CESP is different from that in ESP.

(c) Inheritance of "as_program"
Any class cannot inherit "as_program". It does not exist in CESP.

Reference

[1] CESP Language Guide Version 3, AI Language Research Institute, Ltd. (1992).