The traditional idea with the course has been to teach both Lisp and Artificial Intelligence. It has always been necessary, of course, to explain that Lisp has many other uses besides for A.I. and that A.I. systems use a variety of programming languages where Lisp is just one of them, although one with a special relationship to A.I.
All of this is true, but there has always been a question whether the students are able to take in both of these topics in the same course. The Lisp course can only be worthwhile if it goes some way into the functional programming topics, such as the use of closures, program generating programs, and partial evaluation. This takes a certain effort from the students. I have tried in earlier years to connect this to the A.I. side of the course by showing examples of how e.g. closures can be used for an A.I.-ish task, but I must admit that a certain part of the course participants seemed to miss this very point.
Because of the development in other programming languages, these characteristics of Lisp are also not as unique as before. This decreases the attraction of this part of the course.
My tentative idea is to throw out Lisp from the first part of the course and to only touch on it briefly towards the end of the course. Instead, the software side of the course can be based on the Leonardo notation, which is essentially set theory notation (with a few extensions), written with the ASCII Latin-1 character set and fixed-width font. This notation is used as the publication language for formulas in the lecture notes and it is used in the operational Leonardo system.
Just like Lisp uses S-expressions for both data and function definitions, so Leonardo uses its LDX expressions both for data and for scripts. Scripts are program-like expressions that compose action expressions, so they can be understood as high-level programs in the sense of programs that specify the major steps in a computation but which leave the details to pieces of code in the host language.
As shown in the lecture notes, scripts are therefore directly useful in the A.I. part of the course in a way that short pieces of Lisp code could never be. In the case of action planning, for example, the specification of the problem is expressed in Leonardo notation (for example, PDDL can be mapped to that notation) and the resulting plan is a script. The bottom line is that it should take less effort to introduce LDX expressions and scripts than to introduce Lisp, and it should connect better to the A.I. part of the course.
Once all of this is in place, it should be possible towards the end of the course to explain that Lisp is a bit analogous to Leonardo notation except that it is a full programming language, it lacks some of the higher level capabilities of Leonardo, but on the other hand it is a full-fledged programming language, and finally it just uses one kind of parentheses except several as is the case in Leonardo. This will not give the students an ability to actually do programming in Lisp, but in fact that did not often happen with the old structure of the course either. However, it should at least give them an understanding for what this language is about.
Comments about this?