22:07 29 May 1979 Time: 22:55 Date: 29 May 1979 Stanford University Artificial Intelligence Laboratory Computer Science Department Stanford, California
Total Page:16
File Type:pdf, Size:1020Kb
»;«;«;<. .>:<»:..;..;<.:.»:<.;..;<>:»:..;« FOR DELIVERY TO JACKS HALL ,:<,:<,:,».:.,:<«.».:<.:«:< t Please place in bin for Margaret Jacks Hall *.*.*..... >:<>:< . File under: S Date: 29 May 1979 Name: Stephen Westfold Name: Stephen Westfold Project: I Programmer: SJW File Name: AIL2.XGP[AIH,SJW] File Last Written: 22:07 29 May 1979 Time: 22:55 Date: 29 May 1979 Stanford University Artificial Intelligence Laboratory Computer Science Department Stanford, California i>>:.!;«:«:<!;«;<>:<!:«:»:»:»:< K«:<>;<>:":<>:<>;c>:n;<>:o:o:»;o;o;i>;n;»M^^ AI Languages 1 An Historical Overview of Artificial Intelligence Programming Languages Stephen Westfold Artificial Intelligence programming languages have had a central role in the history of Artificial Intelligence. They have two important <functions,uses>. First, they allow programs demonstrating and testing AI ideas to be implemented conveniently. Second, they provide vehicles of thought. As with any high-level languages, they allow the user to concentrate on higher level concepts and avoid being distracted by low-level implementation details. In this article we distinguish between the general purpose languages widely used in Al, such as LISP and POP-2, and the higher level AI languages, such as PLANNER and QLISP. Using the concepts of the higher level languages imposes a structure on the way one thinks, which can be restrictive, but without some such structure it is very difficult to approach the problems of AI. Frequently, new ideas in Al are accompanied by a new AI language in which it is natural to apply these ideas. Usually, such a higher level language is built on an existing high-level AI language so that the desirable features of the host language do not have to be re-implemented in the new language. Figure 1 gives a rough indication of the directions in which AI languages developed and the major influences on the languages. IPL was developed around 1956 by Newell, Shaw, and Simon [] as the first programming language specifically for AI. Its design was guided by ideas from psychology, especially the intuition of association <more?>. The primary elements of the language were symbols as opposed to numbers, around which all other languages of the time were built. To form associations of these symbols, list processing was introduced. The objective was to enable programs to build data structures of unpredictable size and shape conveniently. The problem of unpredictable shape was solved by using data elements consisting of two fields, each of which could hold either a symbol or a pointer to another such data element. This simple arrangement allows arbitrary binary trees or list structure to be built. The problem of unpredictable size is handled by having a free list of data elements that are allocated to the various data structures as required. A major advantage of list structure is that new elements can be inserted and elements can be removed from existing structure very simply. However, it is clearly desirable that elements deleted from all structures should be available for reuse in new structure. In IPL the user is responsible for returning cells to the free list when they were no longer required. For programs that build complex structures that include some sharing of sub-structures, however, it is difficult to determine in general when an element is deleted from one structure whether it, or any structure it points to, is part of any other structure. Later list processing systems have therefore taken responsibility for reclaiming elements no longer used. One method for doing this is to maintain a reference count for each element showing how many other elements point to it. Every primitive list operation that deletes a pointer must decrement the count of the element pointed to and, if the count is zero, reclaim it and recursively delete any pointers from the element. An alternative method for reclaiming elements is that of garbage collection. Periodically, such as when the free list is empty, the garbage collector traces all the pointers to elements accessible to the program. Tracing a pointer consists of marking the element pointed to and recursively tracing the pointers of this element. This process ensures that all elements still in use are marked, so the unmarked elements can be collected and added to the free list. It turns out that there are some combinations of list operations where it is not feasible to maintain reference counts correctly [MOSE ?], whereas garbagecollection can still be applied. AI Languages 2 Another feature of IPL is the generator which is a procedure for computing a series of values. It produces one value each time it is called and is then suspended so that it starts from where it left off the next time it is called, [see Control Structures section for more information] This idea was to turn up later in CONNIVER and similar languages. Most of the programs of the early history of AI were written in IPL, in particular the version called IPL-V. <The Logic Theorist (the first heuristic program) The General Problem Solver The Newell-Shaw-Simon Chess Program EPAM Feldman's two-choice decision model Lindsay's SAD SAM Green, et.al. BASEBALL (I think) Tonge's Assembly Line Balancing program > -Where do the Carnegie languages- L*, etc. - fit in? > 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 LEAP 1970 1971 1972 1973 1974 1975 Figure 1. Historical chart of the development of AI languages. The dotted lines indicate major influences. The bold lines indicate stronger relationships. Many of the ideas of IPL went into LISP. Unlike IPL, a rather low-level language with a sequence-of-instruction style although it was considered quite a high-level' language at the time of its invention,LISP is a high-level language with an algebraic style inspired by, but different from, the AI Languages 3 algebraic notation pioneered by FORTRAN. During the design phase of LISP some of the LISP ideas were implemented within FORTRAN leading to the language FLPL [GELE], FLPL was created so that some of the features of LISP would be in a working system that could be used for writing a plane geometry program [GELE], FLPL will not be discussed further. The first dialect of LISP to be widely used was LISP 1.5. In the late sixties a number of new dialects of LISP were developed to meet the demand for sophisticated programming aids. The most important of these dialects are MACLISP and INTERLISP (derived from 940 LISP through BBN LISP). Another significantly used dialect is UCI LISP, an extension of STANFORD LISP 1.6 (itself an extended version of LISP 1.5) developed at the University of California at Irvine. UCI LISP will not be discussed further because its advanced features are basically a subset of those of INTERLISP. POP-2 was developed in the United Kingdom to have some of the features of LISP in an ALGOL- like syntax and to be suitable for implementation on medium-sized machines. <the intra, to this paragraph should be changed. At the end of the sixties many AI researchers wished to have primitives in their languages to allow convenient associative retrieval of symbolic data. LEAP was one embodiment of these ideas and it was added to SAIL which was otherwise a version of ALGOL6O. In the LISP communities such ideas lead to QA4 and PLANNER, higher level languages implemented in LISP. These languages were also designed to allow special purpose problem solving and deduction methods to be written conveniently. QLISP is a slightly revised version of QA4 made to fit cleanly into INTERLISP. CONNIVER embodied a reaction against PLANNER, giving the AI programmer lower level control while still maintaining many of the ideas of PLANNER. A number of features first introduced in AI programming languages have been found to be useful in Computer Science more generally and have been included in many programming languages. It is difficult to trace the source of ideas with much certainty - frequently the same or similar ideas occur independently at different times and places - so some people probably would not agree with some of the items listed below. Also, the list is not intended to be complete. Probably the most important idea so far has been list processing itself. This is one of the basic ideas of the field of data structures with applications in many areas of Computer Science including complexity theory, operating systems and compilers. An early addition of list processing primitives to a more generally available language was SLIP, a subroutine package for FORTRAN [WEIZ 1963]. SLIP was used for some A I work but mainly for other fields. Since ALGOL6B most general purpose proramming languages, including PASCAL, ... , have flexible data structures such as records which owe much to the ideas of list processing. Garbage collection is typically used to manage the storage of such structures. The designs of LISP and ALGOL overlapped in time with McCarthy involved with both. He was influential in the decision to include both conditional expressions and recursion in ALGOL6O, having already decided to include them in LISP. Symbol manipulation has been critical for the field of algebraic manipulation. Indeed, many of 'them, including MACSYMA [] and REDUCE [HEAR 19??] have used LISP as a base language. Some symbol manipulation facilities were included in the language COMIT developed around 1960 tl COMIT is primarily a string handling language with some features specially designed to help in the analysis of natural language text. It was used for some AI work. It has been superceded to a large extent by SNOBOL []. The applicative style of programming, pioneered in LISP (also used in APL) has been AI Languages 4 suggested by a number of people including Backus [BACK 1978] to be a more appropriate style than the yon Neumann machine-oriented languages currently dominant.