About this directory:
=====================

This directory contains two EqL interpreters, named sun3eql
and vaxeql, which run on Sun-3 and the Vax family respectively.
(The subdirectory System contains the source code and makefile
to build an EqL interpreter on any Unix machine of your choice.)

This directory also contains all the EqL programs described in the
UNC Technical Report TR 87-010, "EqL User's Guide", by Bharat Jayaraman 
and Gopal Gupta, May 1987.  The user's guide (in TeX format) is in the 
file userguide.tex.  The program numbers below are those cited in the TR.

Program No.	Title					File Name
-----------	-----					--------- 
   1		Maximum depth of a binary tree		depth
   2		List append				append
   3		Family relationships			family
   4		N Queens Problem			queens
   5		List Membership				member
   6		Set Difference				sdiff
   7		Naive Quicksort				qsort
   8		Quicksort with difference lists		dsort
   9		Postfix Code Generation			postfix
   10		List Mapping				map
   11		Simplification				simp
   12		String Concatenation			cat
   13		Simple I/O Operations			postfix.io	

Other programs in this directory:

File Name(s)		Description
------------		-----------
eliza, elizatalk	A simplified version of Weizenbaum's program.
			Invoke by typing
				% eql -f eliza elizatalk
			Start "conversation" by typing 
				doctor().

grader			Prints students and their grades in descending
			order of overall average.  Illustrates I/O with files.
			Invoke by typing
				% eql -f grader
			Start grading by typing
				grade('grader.data').
			The file grader.data is also present in this 
			directory.

tree			Binary tree insertion and printing. Illustrates
			use of "var" predicate.


Note:  There is a little pause after you invoke 
		% eql -f ...
       because it is performing some initializations, which depends 
       on the size of the files mentioned in the command line.  


Summary of EqL:
===============

EqL is a general-purpose language combining the capabilities of 
functional and logic programming languages.  A program in EqL consists
of a sequence of rules, which may take one of two forms:

	(i)  f(terms) => expression.
	(ii) f(terms) => expression where equations.

The top-level goal also has two forms:

	(i) expression.
	(ii) equations.

Due to its expressional syntax, EqL directly supports functional 
programming.  EqL also supports logic programming, as all its 
variables are 'logical variables' and Prolog-style nondeterminism is
allowed.  A limited form of constraint reasoning, going beyond traditional
functional and logic programming, is also supported.  Further details
of the language are described in UNC TR 87-010.

The declarative semantics of a set of equations is expressed in terms 
of its complete set of solutions.  The computational paradigm of EqL 
is equation solving,  which may also be viewed as a form of 'innermost 
narrowing', a restriction on narrowing that enables more efficient 
computation of solutions.  These details are in the 1988 IEEE-SE paper. 

Version 1.0 of the interpreter for EqL was completed in May 1987, 
and has been tested on a number of non-trivial examples.  It has been
distributed to a number of sites:

U.S.: University of Indiana, University of Wisconsin at Madison, Columbia
University, University of Utah, Naval Postgraduate School, Colorado State 
University, Wichita State University,   Clarkson University, University of 
Idaho, University of North Carolina at Chapel Hill

Canada: University of Waterloo, University of Toronto, Concordia 
University, University of Saskatchewan.

Europe: Generale d'Electricite  (Marcoussis, France), Helsinki University of 
Technology (Finland),  University of Vienna, University of Bristol.

Other: Victoria University of Wellington (New Zealand)

The EqL interpreter  was written by Gopal Gupta, a former doctoral student 
at UNC-Chapel Hill, now an Asst. Professor at New Mexico State University
(gupta@nmsu.edu).  The interpreter runs about half as fast as the C-Prolog 
interpreter on Vaxes and Suns.  It has a modest number of features to aid 
debugging and program testing.  


Papers and TR's available:
==========================

B. Jayaraman and F.S.K. Silbermann, Equations, Sets, and 
Reduction Semantics for Functional and Logic Programming,
Proc. of 1986 ACM Conference on LISP and Functional Programming}, 
pp. 320-331, M.I.T., August, 1986.  (superceded by 1988 IEEE paper below)

B. Jayaraman and G. Gupta, EqL User's Guide, Technical Report
87-010, Department of Computer Science, University of North Carolina at
Chapel Hill, May 1987 (revised September 87), 28 pages.

B. Jayaraman and G.~Gupta, Parallel Execution of an Equational
Language,  Proc. Graph Reduction Workshop, Lecture Notes in Computer 
Science, volume 279, pp. 370-381, Springer-Verlag, October 1987.

G. Gupta, An Interpreter for EqL,  M.S. Thesis, UNC - Chapel Hill,
December 1987, 55 pages.

B. Jayaraman, Semantics of EqL, IEEE Transactions on 
Software Engineering, vol. SE-14, no. 4, pp. 472-480, April 1988.

B. Jayaraman and G. Gupta, EqL: the language and its implementation,
IEEE Transactions on Software Engineering,  volume SE-15,
no. 6, pp.771-779,  June 1989.


Finally:
========

Please let Bharat Jayaraman (bharat@cs.buffalo.edu) know if you acquired 
this system by ftp, so that you can included in our mailing list.
