Computing Reviews
Today's Issue Hot Topics Search Browse Recommended My Account Log In
Review Help
Search
Symbolic computing with Lisp
Cameron R., Dixon A., Prentice-Hall, Inc., Upper Saddle River, NJ, 1992. Type: Book (9780138778460)
Date Reviewed: Apr 1 1994

Anyone wishing to develop skills in writing symbolic computing applications will be interested in this book. Intended as a one-semester third-year course, it comes with a Small Lisp interpreter on disk, and covers topics including symbolic differentiation, recursive definitions, simplification of algebraic expressions, theorem proving, program transformation, symbolic pattern matching, lexical analysis, and parsing. Also, it discusses some basic concepts from the ground up, particularly recursion and abstract data types. Exercises are included with each chapter.

The first half covers some basic principles using Small Lisp, a purely functional subset of LISP written in a friendlier syntax (m-Lisp). The syntactic sugar will certainly help readers who are new to LISP’s spartan syntax, but it has some unfortunate consequences. The latter part of the book uses Common Lisp in the normal S-Lisp notation, so the reader must change notations in midstream. As the normal notation is introduced quite early in any case, I suspect the book would have been simpler if it had used the same notation from cover to cover, and just extended Small Lisp when necessary. Also, a reader who already knows normal LISP may find that the Small Lisp notation actually disguises familiar concepts.

Chapter 4 introduces GRAIL, a formalism for describing symbolic notations in LISP. GRAIL allows symbolic notations to be processed as normal LISP data objects. The bulk of the book shows methods for doing just this. Some of them are well known, and the rest deserve to be. It is interesting how much is packed into 336 pages. For  example,  a complete Pascal interpreter for Small Lisp is provided on a disk with the book, and the principles for its development are discussed in the text. (The Pascal source code deserves more extensive comments.) The publishers would be well advised to use a standard 360K diskette or a 3.5-inch diskette, not a 1.2MB 5.25-inch diskette, as the data will fit and the standard disk will work in more machines.

The main weaknesses in the book are caused by unsuccessful attempts to make things easier for the reader, for example, the use of two notations as discussed above. Also, in trying to avoid complexity, the text sometimes oversimplifies some important concepts. For example, the function special form is introduced and careful instructions are given for when and how to use it, yet the reason for it is not clear. We are only told, “A lambda expression is neither a function itself nor a form which evaluates to a function, but a syntactic object which represents a function.” The student could be forgiven for wondering why a syntactic object that represents a function cannot be evaluated to a function by the system without further ado. After all, 3 is a syntactic object that represents a number, yet we are not forced to specially convert it into a number by writing, for example, (+ (number 3) (number 6)). This sort of question is bound to occur to more thoughtful students, and they deserve an answer that helps them avoid being forced into a cookbook style of programming. A good treatment of this issue probably cannot omit a discussion of closures, yet the text never mentions them. Without more insight into the operation of a LISP system, the code could seem somewhat arbitrary.

In general, the authors do a good job of explaining the motivation for each development and the code that implements it. The early part is successful at convincing the reader that symbolic processing is a practical undertaking and not a weird, esoteric subject. I would have liked to see more examples showing processing of specific data.

On the whole, I liked the book. The section on predicate calculus is particularly good. Advanced techniques are taught from the ground up, as they should be. This may mean that some topics, such as abstract data types, will have already been covered by third-year students in previous courses. A LISP novice may want to have a more traditional LISP text or manual on hand for reference on those occasions when the authors oversimplify. The book should be of greatest benefit to readers who are starting out in symbolic processing, but I think even experienced readers will find something of interest.

Reviewer:  R. House Review #: CR124022
Bookmark and Share
 
Language Constructs and Features (D.3.3 )
 
 
Lisp (D.3.2 ... )
 
 
Methodologies (D.2.1 ... )
 
Would you recommend this review?
yes
no
Other reviews under "Language Constructs and Features": Date
A stub generator for multilanguage RPC in heterogeneous environments
Gibbons P. IEEE Transactions on Software Engineering 13(1): 77-87, 1987. Type: Article
Aug 1 1987
Essentials of programming languages
Friedman D. (ed), Haynes C., Wand M., MIT Press, Cambridge, MA, 1992. Type: Book (9780262061452)
Feb 1 1994
Extending the domain of APL
Wheatley M. IBM Systems Journal 30(4): 446-455, 1991. Type: Article
Dec 1 1993
more...

E-Mail This Printer-Friendly
Send Your Comments
Contact Us
Reproduction in whole or in part without permission is prohibited.   Copyright 1999-2024 ThinkLoud®
Terms of Use
| Privacy Policy