| |
LISP has been an important programming language in AI research, and its
history demonstrates the more general benefits resulting from the
efforts of AI researchers to tackle exceptionally difficult problems.
As with other developments in AI, LISP demonstrates how, in addressing
problems in the representation and computational treatment of knowledge,
AI researchers often stretched the limits of computing technology and
were forced to invent new techniques that found their way into
mainstream application.
Early AI researchers interested in logical reasoning and problem solving
needed tools to represent logical formulas, proofs, plans, and
computations on such objects. Existing programming techniques were very
awkward for this purpose, inspiring the development of specialized
programming languages, such as list-processing languages. List
structures provide a simple and universal encoding of the expressions
that arise in symbolic logic, formal language theory, and their
applications to the formalization of reasoning and natural language
understanding. Among early list-processing languages (the name is based
on that phrase), LISP was the most effective tool for representing both
symbolic expressions and manipulations of them. It was also an object
of study in itself. LISP can readily operate on other LISP programs
that are represented as list structures, and it thus can be used for
symbolic reasoning on programs. LISP is also notable because it is
based on ideas of mathematical logic that are of great importance in the
study of computability and formal systems (see Chapter 8).
LISP was successful in niche commercial applications. For instance,
LISP is the scripting language in AutoCAD, the widely used
computer-aided design (CAD) program from AutoDesk. But it had much
broader implications for other languages. Effective implementation of
LISP demanded some form of automatic memory management. Thus, LISP had
critical influence far beyond AI in the theory and design of programming
languages, including all functional programming languages as well as
object-oriented languages such as Simula-67, SmallTalk, and, most
notably, Java. This is not just a happy accident, but rather a
consequence of the conceptual breakthroughs arising from the effort to
develop computational models of reasoning. Other examples include
frame-based knowledge representations, which strongly influenced the
development of object-oriented programming and object databases;
rule-based and logic-programming language ideas, which found practical
applications in expert systems, databases, and optimization techniques;
and CAD representations for reasoning with uncertainty, which have found
their way into manufacturing control, medical and equipment diagnosis,
and human-computer interfaces.
|