Jatha is a Java library that implements a fairly large subset of Common LISP, including most of the datatypes (e.g. packages, bignums) and their associated methods.

Jatha Overview

  • Contains a large subset of Common LISP. Not a toy implementation.
  • Includes the org.jatha.dynatype package that implements a hierarchy of dynamically-typed data types that follows the Common LISP set of data types.
  • Has been used to convert Algernon, a medium-sized LISP rule engine, to Java on a line-for-line basis.
  • Surprisingly fast.
  • Useful as an embedded library, or as a stand-alone application.

The API allows programmatic access to LISP from Java, either using an eval() method or using Java methods, e.g.

LispValue firstElement = myList.car();

Additional LISP primitives can be written in Java and registered at runtime to be used in the LISP interpreter. The LISP engine compiles the input forms to an abstract machine code specified in Kogge's book "The Architecture of Symbolic Machines". The engine is pretty fast on today's computers. The following program can calculate 2^128 = 340282366920938463463374607431768211456 in about 4 milliseconds:

(defun power (a n) (if (zerop n) 1 (* a (power a (1- n)))))

The Jatha library is covered by the Gnu Lesser General Public License, which allows libraries to be combined with non-free software.