narain%rand-unix@sri-unix.UUCP (01/07/84)
A central issue in AI is knowledge representation. Experimentation with a new KR scheme often involves defining a new language. Often, definitions and meanings of new languages are conceived of naturally in terms of recursive (hierarchical) structures. For instance, many grammars of English- like frontends are recursive, so are production system definitions, so are theorem provers. The abstract machinery underlying Lisp, the Lambda Calculus, is also inherently recursive, yet very simple and powerful. It involves the notion of function application to symbolic expressions. Functions can themselves be symbolic expressions. Symbolic expressions provide a basis for SIMPLE implementation and manipulation of complex data/knowledge/program structures. It is therefore possible to easily interpret new language primitives in terms of Lisp's already very high level primitives. Thus, Lisp is a great "machine language" for AI. The usefulness of a well understood, powerful, abstract machinery of the implementation language is probably more obvious when we consider Prolog. The logical interpretation of Prolog programs helps considerably in their development and verification. Logic is a convenient specification language for a lot of AI, and it is far easier to 'compile' those specifications into a logic language like Prolog than into Pascal. For instance, take natural language front ends implemented in DCGs or database/expert-system integrity and redundancy constraints. The fact that programs can be considered as data is not true only of Lisp. Even in Pascal you can analyze a Pascal program. The nice thing in Lisp, however, is that because of its few (but very powerful) primitives, programs tend to be simply structured and concise (cf. claims in recent issues of this bulletin that Lisp programs were much shorter than Pascal programs). So naturally it is simpler to analyze Lisp programs in Lisp than it is to analyze Pascal programs in Pascal. Of course, Lisp environments have evolved for over two decades and contribute no less to its desirability for AI. Some of the nice features include screen-oriented editors, interactiveness, debugging facilities, and an extremely simple syntax. I would greatly appreciate any comments on the above. Sanjai Narain Rand.