GetTextbooks.co.uk  
 Compare Prices & Save up to 90%
Search by ISBN, title, author, etc ...

Login | Sign up | My Wish List  


The Handbook of Programming Languages (HPL): Functional, Concurrent and Logic Programming Languages

by Peter Salus, Peter H. Salus (Editor)

ISBN-10: 9781578700110
ISBN-10: 1-57870-011-6
ISBN-13: 9781578700110
ISBN-13: 978-1-57870-011-0
Textbook Binding
1998-05-08
Macmillan Technical Pub


Find Lowest Price

Editorials


Amazon.com
The final volume of the Handbook of Programming Languages series, Functional, Concurrent and Logic Programming Languages, discusses languages that work with data based on the high-level operations to be performed. This volume interprets what the data mean instead of precisely how to perform the computations. These languages are natural choices for developers of artificial intelligence and knowledge-based applications.

This book opens with a brief general description of Lisp and devotes a chapter to Emacs Lisp. Sections on Scheme, Guile, and CLOS follow.

The volume wraps up with a long chapter on Prolog--a key logic programming language that is highly expressive and useful for knowledge systems and artificial intelligence development. Though knowledge-based applications still make up only a small portion of the overall programming landscape, there's little doubt that they will play an increasingly important role in the future. This volume chronicles the roots of the evolution of knowledge-based applications. --Stephen Plain


Book Description
Volume IV begins with the Logic Programming group, all descended from John McCarthy's LISP of the late 1960s. The Volume begins with a few pages from the LISP 1.5 Programmer's Manual, a vital token of things to come and moves on to LISP's offspring: LISP, Scheme, Guile, and CLOS. Finally, Jamie Andrews provides a substantial essay on the most important Functional programming language, Prolog. The contributions are designed to enable the programmer to evaluate the languages and to understand the ways in which each works.* Bob Chassell on Emacs LISP,* Brian Harvey on Scheme,* Jim Blandy on Guile,* Jim Veitch on CLOS,* Jamie Andrews on Prolog.
  • Unique leaders in the field of functional, concurrent and logic programming provide insightful information about the language that they helped to create
  • A complete handbook covering the most widely used functional, concurrent and logic programming languages
  • Comprehensive coverage of each language includes history, syntax, variables, tips and traps
  • Unique introductory material enables professional programmers to evaluate whether a specific language is appropriate for his or her use

Reviews


Fairly good overview
This book is the last of the HPL series and covers some of the more popular logic and functional programming languages. It is however somewhat outdated, since some up-and-coming functional programming languages, such as Haskell, are only mentioned and not treated in detail.

The first chapter is a quick introduction to Lisp (2 pages) and is put into to set up the next chapter on Emacs Lisp. This chapter is written by R.J. Chassell, and gives a general overview of the main features of Emacs Lisp. The author does a good job of explaining the language, and how it fits into the functional programming paradigm. He uses an interesting diagrammatic representation, which he calls "chest of drawers" to explain how printed representations of Emacs Lisp are different from the internal representation in the computer. One can also see very clearly the lambda calculus origins of Lisp in this chapter. The definition of a function in Lisp clearly illustrates the effectiveness of functional programming in emulating the concept from mathematics. A function is thought of as a rule for computation that takes several arguments and returns a value. It can however have a "side effect" of changing the values of variables or the contents of data structures. It is this later pr

operty of a function in programming languages that can cause confusion to a mathematician-turned-programmer. Mathematicians are not accustomed to worrying about these side effects, only concerning themselves with the result of the function. But the author does give a good explanation as to the importance of side effects in building programs. He is also careful to explain the different types of functions in Lisp, namely defined, anonymous, and primitive ones. The later are built-in ones that are written in C and provide performance enhancement. In addition, macros are distinguished from functions in that they merely serve as translators from user expressions to expressions to be evaluated by the Lisp interpreter. The "fundamental" functions "car", "cdr", and "cons" are also explained in detail, as functions that create and operate on lists.

In chapter 3, the author Brian Harvey discusses the language Scheme, and he endeavors to illustrate the simplicity of Scheme as a programming language. Because of its simplicity, Scheme has been used as a teaching tool in courses on computer languages and general programming. The author shows how Scheme is related to Lisp, and most importantly, he emphasizes the composition of functions (recursion) as being the primary control mechanism in Scheme. He makes a good case for the use of functional programming as a methodology for obtaining clarity and economy of thought in writing programs. The ability of Scheme to perform garbage collection contributes greatly to Scheme's ease of use. For example, Scheme employs lists in preference to arrays, with lists being dynamically allocated data structures, and the elements of the list can themselves be lists. In addition, and also very important, is the capability of Scheme to implement untyped variables. Mixing data types is a very powerful capability when attempting to write programs that are written to study complicated ideas and constructions from pure mathematics. The author also outlines the ability of Scheme to do tail call elimination, emphasizing that Scheme is the first language in which to guarantee this as part of its language specification. Recursive calls can be expensive for performance, but this capability allows conventional "for" and "while" processing to take place. For the beginner to Scheme, or functional programming, the author gives a useful discussion on common programming problems at the end of the chapter.

In the next chapter, the author Jim Blandy gives an overview of Guile. I did not read this chapter so I will omit its review.

In chapter 5, Jim Vietch discusses Common Lisp Object System (CLOS), which is an attempt to make Common Lisp an object-oriented programming language. The author gives a good historical introduction to CLOS and outlines its main features. The author compares CLOS with C++ and Smalltalk at various places in the chapter, which is helpful to programmers who are familiar with these latter languages and want to learn about how to do OO-programming in a functional programming language. The author does a good job of explaining the metaobject protocol (MOP), which allows overriding of the standard CLOS semantics. The author is convincing in his arguments of how MOP can add clarity and efficiency in OO-programmming. In addition, an effective discussion, using various code examples, is given of the power of dependency tracking and lazy evaluation. For me personally, lazy evaluation has been the tour-de-force behind functional programming and one of its most powerful features. Towards the end of the chapter, the author gives a good overview of performance issues with CLOS and a few hints on how to improve it.

The last chapter of the book covers Prolog, and is written by James Andrews. From the standpoint of mathematical logic, Prolog is based on the theory of Horn clauses, instead of the lambda calculus. Thus it could be described as a logic programming language, and this is the characterization given by the author in this book. Commercial Prolog compilers are now available, but the use of Prolog has executed a sort of random walk since its invention in the early 1970s. The author discusses, objectively I think, the misconceptions and problems with the use of Prolog. The main properties of Prolog are summarized very well in the article, with rules and recursion being the main expressive and computational strategies employed in Prolog. A program in Prolog is a sequence of (Horn) clauses, and the author shows how a Prolog program is able to arrive at a conclusion (or output) based on the rules and facts given in the program, which is effectively a depth-first search algorithm. The author also gives a nice discussion on the advanced features of Prolog, including negation, cuts, and predicates.


not recommended
My first impressions about this handbook are not very favourable.

Although the first volume claims to be a handbook of object oriented languagesit does not cover object oriented languages of Niklaus Wirth's group, e.g. Oberon-2 or its commercial dialect Component Pascal.

Additionally to that, a descendant of Wirth's languages, Modula 3, is claimed to be one= of the smallest OO-languages. Due to the ignorance given to Oberon-2, this is only true for the OO languages covered in this handbook. In comparison to Oberon-2, Modula-3 is bloated (language report size is 60 pages vs 2E 20 pages).

The language family tree on the inside covers do not give the correct descendants/ancestors for some of the languages.

Scrolling through the second volume on imperative languages reveals similar prob=lems: Pascal is only mentioned with its commercial dialect "Turbo Pascal", which -- at least in its last incarnation-- is an OO-language and not imperative one, and should therefore be covered in the first volume. It misses the ISO/ANSI standards (ISO 7185: Standard Pascal and IS10206: Extended Pascal). It misses to mention Modula-2 (as I recall from memory, since I did not buy the book).

Since - IMHO - a handbook should be some objective reference, the first two volumes do not meet my criteria for a handbook.



Home | Browse | Professors | Merchants | Webmasters | Contact Us

[ United States | Canada ]

Copyright © 2003-2008 GetTextbooks.co.uk