UTILISP - Introduction

Let’s look at the other LISP implementation on MTS, University of Tokyo Lisp or UTILISP.

UTILISP overview

UTILISP was originally developed at the University of Tokyo in 1980 for S/360 compatible mainframes. It was worked on there by students and staff for the following decade, moving to 68000 and SPARC processors along the way. It was distributed to several sites in Japan and the rest of the world and was used for AI research. One reason for its popularity was the speed of its compiled code.

Language wise, it is similar to Maclisp; it uses dynamic scope and has macro facilities.


UTILISP was made available on MTS at UM in 1984 as *UTILISP: it has some light customisation to make it work with MTS and an initial version of an MTS Volume was produced based on the original UTILISP documentation.

One key program produced using UTILISP was a Prolog implementation, PROLOG/KR; this is also available on MTS and I will look at this later.


No special installation instructions to get UTILISP running - just do the standard D6.0 setup as described in this guide and then sign on as a regular user such as ST01.


UTILISP is an interpreted environment. Running *UTILISP on its own will allow you to start entering expressions which will be immediately evaluated. It’s possible to load expressions from a text file by providing it as the 0 parameter to *UTILISP; after the file is read you will remain in the LISP expression reader. To run a complete program and return to MTS afterwards, make the last expression be (quit).

There is an editor available via (edit fn) but it’s easier to do this outside of UTILISP.

One improvement over *LISP is that there is online help, though not using the MTS help system: as an example, type (help car) to view a brief description of how the car function works.

Like *LISP, it’s possible to compile expressions to machine code with (compile fn); note that you have to provide some fixed space memory to UTILISP at startup by setting FIX, eg with the command $run *utilisp par=fix=100. There does not seem to be a way to write the current system state or compiled functions back to disk, however.

Hello world

Here’s a transcript of a session where we run a Hello world program. This assumes the source code is contained in the file hello.ul.

# $list hello.ul
       1     ;; Hello world program for UTILISP
       2     (do ((i 0 (1+ i)))
       3         ((= i 5))
       4         (print "Hello, world!"))
       5     (quit)

# $run *utilisp 0=hello.ul
# Execution begins   12:01:48 
  "Hello, world!"
  "Hello, world!"
  "Hello, world!"
  "Hello, world!"
  "Hello, world!"
# Execution terminated   12:01:48  T=0.035 

Further information

MTS Volume 22 describes the UTILISP implementation and how to run it on MTS.

This paper describes the history of UTILISP.


comments powered by Disqus