Books cal applications. This is followed by several chapters giving further examples of the techniques, including building some more complex data structures and a look at recursive data structures such as trees. Finally, the author summarizes the techniques he has slowly unfolded in the book and gives some more advice on the practicalities of implementing data structures in this way. Overall, it is a stimulating book,
containing interesting and useful advice (though the author does not follow his own advice to avoid global variables as well as he might). Each step is explained by detailed examples: these are generally well planned, but the dynamic memory manager in chapter 7 is flawed in its design (it fails if the client module copies a pointer) and its implementation (mmcollect() does not update *(next->addr_owner)). Otherwise,
it is a good book and one well worth reading. As much of the book is a slow exposition of a few simple techniques it is not a book many programmers will want to read more than once: at £27.80 it is probably a candidate for the company bookshelf rather than private copies.
D J FURBER King's College London, UK
Readable introductionto Unix has plenty of examples Unix workshop A J Pilavakis Macmillan Education, London, U K (1989) 196 pp £25.00 hardback £12.00 softback This book provides a detailed exposition of Unix facilities. It is addressed to undergraduate students and to Unix users who intend to develop software packages or to port their packages from other operating systems to Unix. A considerable number of examples is covered, varying from everyday commands from the Unix file system, the Shell, the visual editor, the text formatter, and the C compiler environment, to more advanced features such as interprocess communication or the accessing information from memory. For the more experienced users, the book illustrates building and maintaining of the software packages, use of Unix mail and uucp, as well as the
use of utilities from the system administration and system information domain. With such a wide range of topics the book combines two different approaches addressed to two different types of users. However, this double-aimed ambition results in inconsistency. The presentation of trivial everyday commands is often too detailed, while some of the more advanced features are treated briefly and left undetermined. To prepare a Unix workshop for the undergraduate students, I would require a more systematic explanation of each command and a concise presentation of its syntax followed by practical examples and exercises. The main weakness of the text, however, is a poor selection of examples for advanced topics. Focused on the syntax, they often neglect the semantics of more sophisticated Unix features. For instance, after reading
the example on shared memory and semaphores, a programmer might wonder why five pages of complicated code were needed when the same output can be achieved with a half-page sequential routine. Finally, it is surprising that from the large scope of Unix literature not a single reference has been recommended. Overall, the text gives a readable introduction to Unix, with plenty o f examples. After walking through offered examples, a novice user can gain a working knowledge of Unix. I would recommend the book for Unix newcomers, those who want to switch from other simpler operating systems to Unix, and to others who want to get a flavour of the more advanced Unix features without deeper understanding of its nature. N SERBEDZIJA Mihajio Pupin Institute, Belgrade, Yugoslavia
Leading edge of research on knowledge acquisitionand machinelearning Knowledge representation and organization in machine learning K Morik (ed) Springer-Verlag, Berlin, F R G (1989) 319 pp DM 47.00 hardback In the early days of machine learning, the role of knowledge represen-
510
tation within a learning system was largely neglected. Subsequent research has been largely directed towards finding more sophisticated generalization algorithms rather than in applying simpler algorithms to more powerful knowledge representations. If machine learning is
to be used as an effective tool for knowledge acquisition (building knowledge bases for expert systems), however, then learning systems must be able to work with more complex knowledge representation schemes. This book is a collection of 15 papers on this problem, which were pre-
information and software technology
Books sented at a Workshop on Knowledge Representation and Organization in Machine Learning in Germany in 1987. Morik advises us, in her introduction, that each of these papers 'brings to light the relation between knowledge representation, knowledge acquisition, and machine learning for a different direction'. This is, for the most part, true, although a few of the papers (those by Swartout and Smoliar and by Littman, in particular) are more concerned with general problems of knowledge acquisition than with the specific problems of knowledge representation within machine learning. Although the book is stated to be intended for a broad audience (teachers, researchers, students and expert-system developers), I suspect that most copies will be read by
researchers in the knowledge-engineering and machine-learning communities, or by students aspiring to be researchers in either of those scientific communities. The book's focus is really too narrow to be of general interest to most students and teachers of artificial intelligence or most expert-system developers. This is unfortunate, because this book contains what is, in my opinion, one of the most interesting papers published in knowledge-engineering circles within the last few years: Morik's own (inauspiciously titled) 'Sloppy Modelling'. This paper raises some interesting questions about the role of modelling within knowledge acquisition and presents an approach towards the construction of really interactive learning systems. Morik's ideas have been tested out in the BLIP (Berlin
Learning by Induction Program) system. Three other papers (of the 15 in this volume) discuss related aspects of BLIP, making this book a valuable source of (otherwise difficult to find) BLIP technical material. I recommend this book to anybody interested in learning more about the 'cutting edge' of research at the interface between knowledge acquisition and machine learning. Springer-Verlag have, as usual with their Lecture Notes, priced the volume very competitively so that it does not stretch your personal or departmental budget too far (47 DM for a conference proceedings is really very cheap). It is well worth the money. S TWINE University of Queensland, St Lucia, Australia
Methods for designing and constructing large systems in M0dula-2 S o , ware development with Modula-2
D Bugden Addison-Wesley, Reading, MA, USA (1989) 365pp £16.95 softback
According to the author, the book is not intended as a text for a first course in programming; rather it is intended for those who have mastered at least the equivalent of a first course in programming in some language such as PASCAL or FORTRAN and are now concerned with using MODULA-2 for large-scale programming projects. The main theme of the book is 'programming in the large" and methods for designing and constructing large systems in MODULA-2. The book is organized in three parts. Part 1 is an exposition of the basics of the MODULA-2 language. Its organization seems particularly well suited for readers familiar with PASCAL in that it begins with two chapters that discuss the major features of MODULA-2 that are signi-
vol 32 no 7 september 1990
ficantly different from PASCAL, namely, modules. Part I continues with a discussion of data types and structures, control structures, etc. The discussion seems complete, without becoming onerous for the experienced programmer. Finally, this section returns to a discussion of modules and their role in design, including information hiding, scope control, and data structures. Part lI covers ~programming in the large'. Software engineering topics are reviewed, with emphasis on design methods for modularization and how well suited each may be for use with MODULA-2. Two of these design methods (structured analysis and structured design and objectoriented design) are studied in detail by employing each in the design of a MODULA-2 program to solve a specific problem, viz. to determine the dependency-structure of procedures in a PASCAL program. Rather surprisingly, after presenting the two solutions the author neither compares the results of the two designs
nor draws conclusions about relative merits of the methods employed. Part II concludes with a brief (14 page) review of program development, testing, and documentation. Part III is an introduction to coroutines for concurrent programming as well as 'low-level' features for systems programming, including type-conversion and input/output. It features MODULA-2 code for a text formatter (h la T R O F ) w r i t t e n with co-routines. A modified structure chart is given for this system. In only about 360 pages this book does cover both software development and MODULA-2, but the coverage of the former topic is somewhat perfunctory, while the latter is sound. The layout is good and the numerous diagrams are well done and useful. Unfortunately, the copy received by this reviewer had the last 16 pages scrambled. D E BODDY Oakland University, Rochester, MI, USA
511