David K. Land (dland)
CSE 151
Essay 1
    While it is certainly arguable that most true programming languages can accomplish the majority of computer related tasks, some languages are better suited for performing certain tasks than others.  I argue that John McCarthy's LISP is the most effective language with which to program artificial intelligence applications.
    The most important features of artificial intelligence programming is maintaing organization (Hawley 137).  Keeping your data and code organized is the key to efficiency, reusability, correctness, performance, and a number of other attractive features in AI programs.  Programs must run efficiently as well as support a robust set of features and sophisticated actions (as would be required of anything that is to be considered intelligent).  This is not an easy combination to implement and it tends to create code that is not only complex but, if the authors are not careful, hopelessly cluttered.  Therefore, it would make sense that programmers use a language that makes organization easy, efficient, and even automatic.  LISP is just such a language.
    Organization of raw data is important to any AI application (Berk 9).  Many programs are designed to take in an enormous amount of information, store it, and have access to it later.  Often times access to this data must be fast.  Pormerlou's driving program ALVINN is a good example of this (Russel, Norvig 586).  Not only does ALVINN have to be able to absorb and sort an enormous amount of visual input, but it has to be able to access it extremely quickly if it wants to avoid crashing (literally).  LISP was made with just these requirements in mind. Representing complex data and relationship structures is with LISP is inherently easier than most other languages (Berk 9). Consider the following code

    (face (parts eye nose mouth)
        (eyes located-above nose)
        (nose located-above mouth)
        (eyes visual-data-sensors)
        (node olfactory-data-sensor)
        (etc ...))

This shows how easy and natural it is in LISP to set up objects and their relationships. Doing this in most other languages would take much more syntactical red-tape.  This kind of data structuring is important in AI, especially with regards to expert systems.
   In a more broad sense, the structure of the entire program is important as well.  The object-oriented method of software construction can be of enormous value in this regard.  Object-oriented code is much easier to read, write, and reuse.  LISP provides constructs for implementation of fully object-orientation software through CLOS (Bobrow).
    On a similar note, making code more modular via the use of procedures is also a good tool in the organization of programs.  Breaking code up into a number of small procedures is not only a characteristic trait of object-oriented languages, but it is also a convention followed in the world of LISP programming, object-oriented or not.  LISP programs often consist of many small, usually recursive, functions that can be easily modified or extended with little or no changes needed to other parts of the code.
    While LISP is best suited for most AI applications, it is arguable that it does fall short in some regards.  As I stated above, it is important that the relationship between objects are very well defined in an AI application.  While LISP does achieve this goal very naturally and effectively, it has been said that no language does this better than Prolog (Bratko vii).  Its very syntax forces a high level of description and interdependence between objects.  Take, for example, the following code given in Bratko

    grandfather(X, Y) :-
        father(X, Z),
        father(Z, Y).

This shows how easily and explicitly Prolog defines relationships.  The definition and application of such relationships is exactly what the language was created to do.
   In addition, Prolog programs tend to force the author to write code in a more goal oriented fashion.  The programmer simply describes the situation (the facts and the relationships) and lets Prolog solve the problems (Bratko viii).  This tends to take the burden off the programmer so he/she can concentrate on other aspects.  LISP programs do not have this feature quite so inherent.
    Despite a few areas of expertise where Prolog eclipses it, LISP continues to be the language of choice for the majority AI programmers.  It not only supplies the necessary tools for good programming strategies, but by its very nature, it implements them in a natural and straightforward manner.
 
 

Sources

Berk, A.A. LISP: The Language of Artificial Intelligence. London: Collins, 1985.

Bobrow, David, et al. Common Lisp Object System. Online. June 1988.

Bratko, Ivan. Prolog Programming for Artificial Intelligence. Wokingham, England; Reading, Mass.: Addison-Wesley Pub. Co., c1990.

Hawley, Robert. Artificial Intelligence Programming Environments. New York: Halsted Press, 1987.

Russell and Norvig. Artificial Intelligence: A Modern Approach. Upper Saddle River: Prentice-Hall, 1995.