Boobs, developing distributed applications'. While this may be true of commercially available software-engineering environments in general, specific examples do exist, such as the Apollo Domain system, which is commercially available and well respected. Also, there is plenty of relevant research work that could have been critically presented, for example, the Grapevine project at Xerox PARC. The book consists of three parts: first, a general introduction to distributed computer systems by means of examples; second, hardware and software issues in distributed systems; and third, organization and economics. There is also a short
appendix on application development costs. Part two, the technical core of the book, places strong emphasis on distribution of data but lacks a comprehensive description of the issues in distributed operating systems support. Little is written about the remote procedure call (RPC) as a distributed system development tool (neither its origins, details of operation, semantics, nor distributed systems research based on RPC). The local area networks description is short and weak, which in view of their importance in this field is rather surprising: the exploitation of emergent network technology, and the constraints imposed by it, are not
explored in the detail that might have been expected. The author does not suggest who might benefit from reading this book. In my view, it is not sufficiently comprehensive as a university or college introduction to distributed computer systems, nor as a technical introduction for professionals. The strength of the book lies more in its organizational and economics aspects, for which it could be recommended to managers in the IT user industry.
D HUTCHISON Lancaster University, UK
Comprehensive textbook on functional programming Functional programming A J Field and P G Harrison Addison Wesley, Wokingham, UK (1988) 602 pp £18.95 hardback Many books on functional programming have appeared recently, and many more are due to appear in the next few years. Field and Harrison have written a book on functional programming that is aimed at a fairly wide audience. The book contains an introduction to functional programming using the language Hope (by Burstall, MacQueen, and Sanella, 1980). This minicourse in functional programm-
ing is apparently meant to introduce readers at undergraduate level to the field and to convey the flavour of functional programming to the ignorant. A much larger part of the book (about four-fifths) is aimed at a much smaller audience though. Most of the book deals with theory and implementation of functional programming languages. The main subject of the book is therefore not quite in accordance with the title. The book deals quite comprehensively with implementation techniques of functional languages and is therefore mainly aimed at people who want to
implement functional-language systems or students (graduate level) who are interested in this. The tutorial style makes the book suitable as a textbook, although I would rather use it for a course in compiler technology for functional languages than for a course in functional programming. The authors can only be praised for managing to make a comprehensive textbook. Topics are dealt with in detail, and exercises are available in sufficient quantities. S JOOSTEN University of Twente, Enschede, The Netherlands
Good introduction to use and its applications LISP: from applications
foundations
to
G I Doukidis, V P Shah and M C Angelides Chartwell-Bratt, Bromley, UK (I 988) 226 pp £6.95 softback The intended readership of this book comprises undergraduates, engineers, and programmers who intend to
166
learn LISPand use it to develop simple artificial intelligence (AI) systems. It assumes no programming experience, although some, not necessarily in LISP, is considered to be an advantage. The authors claim that the book is appropriate as an introduction to LISP for advanced programmers but also as guide to a first programming course. The most advanced features
of LISP(scope and extent of variables, first-class objectives, macros, etc.), however, are not described in the book. The book is divided into several distinct levels of program development in LISP. At the first level the authors introduce the LISP concepts. The second level covers the most important characteristics of LISP - -
information and software technology
.Books iteration, recursion, list processing, and general control constructs. The functioning of LISP interpreters is explained in detail. Special attention is paid to the representation of symbolic expressions in LISP. There are many excellent exercises included at the end of each chapter, which are well chosen and contribute to the presentation of the language. The third level introduces advanced LISP for implementing input and output aspects, for handling complex data structures. The last two chapters are dedicated to the use of LISP in solving basic AI problems - - search problems and construction of knowledge bases
through the use of frames. The applications described are not sophisticated but are developed carefully and show the basic ideas in solving these problems. There are some misunderstandings in the book. For example, the special forms LET and DO are not functions as they are introduced. I think that the dialect muLisp is not so appropriate for teaching LISP. For example, the Scheme dialect is better as used in the excellent books Structure and interpretation of computer programs by Abelson and Sussman and The little Lisper by D Friedman and M Felleisen.
The book is written in an easy-tounderstand style. The text and diagrams are clearly produced and the price quite reasonable. My opinion is that the book is a good introduction to LISP and will be useful for those who have not yet written their first LISP function. It provides a well structured teaching and understanding approach to LISP programming and will be useful to those who want to know LISP language as an expert.
I POPOV Bulgarian Academy of Sciences, Sofia, Bulgaria
Extensive and authoritative review of HCI field Handbook of human-computer interaction M Helanfler (ed) North-Holland, Amsterdam, The Netherlands (1988) 1167 pp Dfl 490.00 hardback The Handbook of human-computer interaction contains an extensive and authoritative review of the broad range of topics concerned with the design and development of humancomputer interfaces. The unique features of this book are its scale and scope. The book itself represents a massive undertaking, containing 52 chapters and over 1100 pages devoted to the different aspects of human-computer interaction (HCI). These chapters are divided into seven sections: • • • •
models and theories user interface design individual differences and training application of computer technology • tools for design and evaluation • artificial intelligence • psychological and organizational issues The coverage of material in the differ-
vol 32 no 2 march 1990
ent sections is excellent and there are few topics related to interface design and development that are not described. The chapters themselves are generally well written. Most authors have taken great care to present their respective topics in a clear and concise fashion without resorting to dense, heavily cited prose. An interesting feature of some chapters is that they go beyond a summary of current research or design practice and introduce future research issues. The chapter on usability engineering is a particularly good example of this. A few chapters, such as those on task analysis and decision-support systems, take a narrow approach to rich topic areas and limit themselves to the author's own line of research. The perspective taken in the handbook is research oriented and it is clearly aimed at either an academic audience or industrial people closely involved with interface design and development. While individual chapters provide introductions to specific topics, the handbook's size and level of detail mean that it is unsuitable as an initial introductory text to HCI. For people working on HCI or related topics, however, it forms an indispensable source of research find-
ings, reference material, and interesting ideas. The handbook is not without its shortcomings. While the overall layout and presentation is good, the text contains a large number of typographic mistakes, some of which seem to have been caused by the document formatting system used. For a book of this size and complexity, the index is limited and appears to be based on a few keywords picked up from each chapter. According to the index, the terms 'icons' and 'user model' only occur on three pages in the entire handbook? Despite having commented on the excellent coverage of the handbook, there are a few issues that have been overlooked, such as hypertext and multi-media interfaces, the use of new technologies (e.g., CDROM), and the design of interfaces for handicapped users. Finally, the most basic problem with the handbook is its high cost, and I am afraid its destined to become a library book keenly sought after by a wide variety of researchers and interface developers. L HARDMAN Scottish HCI Centre, Heriot-Watt University, UK
167