1. This is Guy Steele standing in for Alan Kay and you already have a list of some questions that I think you've had a chance to look over that P. Gabriel forwarded to you. I propose to go over some of those, although not necessarily in the original order. To let it flow, it would be better. I also have got a few questions you haven't seen yet, that are short and we'll leave those for later in the conversation. Why don't we start with what is your question no. 4: Who helped you the most with early ideas for Lisp and its early development? I want to go over that because I tend to forget people. I took from Newell & Simon the idea of Lisp structure for representing data and also for representing program. They weren't aware that they were going to be helping me, but, anyway, I took it from them. I got the idea of functional programming from John Backus’ FORTRAN. The idea of ... as a function comes from Herbert Gelernter and Carl Gerberich. I was advising them on a FORTRAN-Lisp processing language, which I was advocating for doing Minsky's geometry machine.



Then Steve Russell proposed using my eval as an interpreter and 6 math graduate students in the initial AI project and 2 programmers, Russell and ... did the early development. Phyllis Fox wrote the first manual and at least some of the early programming was done by Nathaniel Rochester who came from IBM. So, those were the people who were involved early. Probably I've forgotten some of them.

3. Let's move up to the list to question no. 3. What would you add to Lisp if you could go back in time? What would you delete and what would you change? People have added some Englishy stuff and at least the syntax of that is not in the spirit of Lisp. I don't have any objection to the content and generally I don't have any objection to things being added to Lisp, because you can always not use them. I don't have any particular ambitions to add anything in particular to Lisp right now. I'd like to add some direct logic, but I don't know how to do that in a good way.

5. What's an example of an Englishy feature in Lisp that you wouldn't use? It seems to me some of the stuff concerning objects was added in an Englishy way - I have forgotten it. You surely should remember.

7. Up to your question no. 2: What separates a good programming language from a not so good one? I don't have any general answer to that. I have one advocacy, now that I think about it, which Lisp has partly and maybe I advocate it something to be explicitly added to Lisp and to other programming languages and that is that a language should have access to its own abstract syntax. Abstract syntax is an idea I proposed in a paper in 1962. It's too elaborate to talk about much now, but the general idea of it is that, as far as the abstract syntax in concerned, it's indifferent whether sums are represented by a+b or (+ a b), as Lisp would do it, or as Gödel numbers would do it as 17 to the Gödel number of a x 19 to the Gödel number of b. You still need functions for distinguishing whether an expression is a sum and for getting the summands and the syntactic function for taking 2 expressions and forming the sum expression. That's abstract syntax and I believe that a programming language should have built into it its own abstract syntactic functions.

8. Of course, one of the important purposes to which you put abstract syntax in Lisp was being able to write its own evaluator. Do you have other purposes in mind as well for abstract syntax? Yes, any program that works with programs in the same language, it's an evaluator or it's a compiler or something that determines whether one program is good enough for some purpose would involve the abstract syntax of the language. If you take an ordinary programming language like Java or something like that, if you want to write a Java program that deals with Java programs, then it has to scan and determine whether something is a sum, it has to go look for the + sign and see whether it makes use of the rules for its precedents.

9. Let's move on to your question no. 1 on your list: what has been the role of programming in AI research and what should it be? There are 2 things there: one of them is the programs that programmers write for doing AI and the other is that the programs that they make their programs write. I haven't got anything very specific to say at the moment, the latter is very important and that's where Lisp is convenient. Concerning the abstract syntax and Lisp, Lisp doesn't explicitly have its own abstract syntax, but at least, it's very convenient to get at the syntax of Lisp. It is not hard to find out whether something is a sum or not. It almost has its own abstract syntax.

12. I was too young in '62. I'd like to turn away from the list of questions you have in front of you, just to some shorter questions that some people have submitted and some of them are dealing in particular with some of the earlier events of Lisp in 1958, if you'd entertain them. The first question is: where did the idea of a property list come from? That idea, in some sense is a realization of the idea of an object, which in my mind actually precedes Lisp. In my paper on programs with common sense, I mentioned an object as something that you add something to say about a part from its structure. The example I think that I gave, was the number 1776, which you remember apart from its arithmetic structure because of it being the date of the American Revolution. There were these objects and I gave several examples and then, in Lisp, I thought about having these property lists. They were used differently from the way I had imagined them being used.

13. How did you imagine and what was different? First of all, my imagination - since it wasn't associated even with a proposed implementation, was somewhat vague, something that I can't remember. Now, I want all of you to remember that 50 years from now, people will be asking you "What were you thinking about then?" I can't give a good answer to that question.

16. Two different programmers are just not paying attention or not caring - it's not relevant. I think I invented both of them and when I invented whichever one came second, I wasn't thinking about what I'd done previously.

17. It's a minor point, but it is something that picks my curiosity. What experience of practical computer programming did you have before 1958, before you tackled Lisp? I'd written some FORTRAN programs. In particular, I'd written the legal move routines for a chess program that I intended to write and these legal move routines were taking over by [Alan] Kotok and [Elwyn] Berlekamp, etc. and were the basis for the MIT chess program. That is I actually didn't write the strategy there because I thought I would have grander ideas than were subsequently realized. I didn't, so they did a quite straight forward program, but the program served one nice political purpose, namely Hubert Dreyfus said no chess program would ever beat him. Dreyfus was a sufficiently bad chess player that that very primitive program did beat him.

18. When you began working on Lisp, in particular looking at the period of about September to November 1958, about what percent of your daily work time did you invest in working on Lisp? Was that sort of 100% of your time or partial time were you devoting your attention to other projects at the same time? I couldn't say that, but actually, I started on it during late summer when I was at IBM and I decided to write a program for differentiating algebraic expressions. What I noticed is that I could write conditional expressions, which I'd already used in those legal move routines for the chess program and that they could be used to embody the rules that were given in the calculus text, in an extremely direct form. Differentiation of algebraic expressions was the leading example that led to the functional form of Lisp programs.

19. You were involved in the ALGOL design effort as well, during the late 1950s. We should know whether you considered using ALGOL 58 as a basis for the design of Lisp rather than coming out of FORTRAN or were there ways in which you were involved with ALGOL 58 indirectly with Lisp? I wasn't at the original ALGOL 58 meeting, so the basic structure of it was established without any input from me. I wouldn't have tried to influence it very much, because they were interested in making a language that could be standardized for numerical calculations. I was perfectly sympathetic with the idea that there should be such a language. When it came to ALGOL 60, I was on the committee and the committee as a whole was much more ambitious, so I pushed for conditional expressions and for boolean expressions, although they were putting it in a bad way. The way a AND b is in ALGOL 60 is you have to evaluate both a and b before you can evaluate the end, which is not right, if you write them as conditional expressions and you only have "if a is false" and you never evaluate b.

21. When did you first embrace the idea of writing computer programs using a recursive style? In one respect, I got it from Newell & Simon. In another respect, in recursive functional style, that was in the summer of '58, when I did this differentiation program. Newell & Simon talked about that in 1956 when they visited the Dartmouth Summer Project on artificial intelligence. They had already done IPL or the first version of IPL.

22. This idea of organizing computer programs as recursive way was an idea that slightly proceeded Lisp itself? Yes. But IPL had, in my opinion, very many bad aspects. They seemed to be bad enough at the time, that I was not tempted to copy them.

23. What were the bad aspects that you didn't want to copy? It was not compositional, that is it wasn't based on functions that you could compose. It was based on subroutines whose names, like J45, were, according to what somebody told me, taken from an old JOHNNIAC loader.

26. I'd like to return now to the list of numbered questions that you have in front of you. At this point I'd like to start with question no. 5 and then we'll take them in forwards order. Should programming languages be designed for theoreticians to facilitate reasoning or for practitioners for getting systems built? Should there be different languages for each purpose? Are the skill sets of a language designers different? My view is that a language should be designed in terms of an abstract syntax and it should have perhaps, several forms of concrete syntax: one which is easy to write and maybe quite abbreviated; another which is good to look at and maybe quite fancy, but after all, the computer is going to produce it and another, which is easy to make computers manipulate. There are still others maybe, but it's easy to make computers prove things about and they all should be based on the same abstract syntax. As it relates to your question, the abstract syntax is what the theoreticians will use and one or more of the concrete syntaxes is what the practitioners will use.

36. I asked for one of the most important contributions. I am going to list 4-5 others that occurred to me and ask your comments on those as well. Close related to the idea of a Lisp program and Lisp data is that it enables you to encode, apply and eval as an universal implementation of the language. The idea of eval is a universal Turing complete function is an important idea, perhaps. Having an expression oriented language, the support of recursive functions, the McCarthy conditional expression, which is spread into all programming languages by now - even C, which has a rather strange syntax for it, but it's there -, and then garbage collection. Have I left out any important idea? Probably. I'm going to ask people from the audience: what have I left out from the list? High order functions, symbols, dynamic programming. I'd like to ask you, John, do you have any other comments about any of those things as how they fit into the overall picture of Lisp and what you were trying to accomplish? Consider garbage collection - when I wrote this program for differentiation, it was written in a straightforward way, using cons for forming the parts of the derivatives and it was just much too awkward to write Erasure, that is erasing things. IPL had explicit erasure things, it had a notion of responsibility bits, so that, if 2 Lisp structures merged, one of them was responsible for their common substructure and that had to be programmed. So, I thought very hard "Is there some way in which we can eliminate having to have explicit erasure, in order to be able to write the differentiation function in a way corresponds to the way that mathematicians describe it?" They don't describe, they don't mention erasing anything in the calculus textbook, so I worked hard on that and came up with garbage collection.



It can be done in a different way using reference counts and I thought of that also, but there aren't enough bits in the IBM 704 Word, to include reference counts. Somebody who used CDC machine was able to do that, but I think garbage collection was needed anyway. Here was a case where making things correspond properly to the abstract notions of mathematics gave rise to an important practical advance. Of course, somebody came along and said to me "You aren't the first person to think of garbage collection. It was present in such and such program, before that." I didn't bother to look, but I suppose it was true.

37. Looking back, what in your career are you most proud of? What would you like to take back? Which idea that you came up with that was not picked up did you wish had more influence? I think that if IBM had taken my ideas on time sharing, particular if Gene Amdahl had taken my ideas on time sharing when he was doing the 360, then things would have been quite a bit better in the 1960s, since what he did was copy the tape-to-tape operating system that Bell Labs had devised. In terms of what would have had the most practical influence that would have been it.

38. I hear "Amen!" from the audience on that. Here is a perhaps slightly more off-the-wall question - question 9 on your list. The Stanford AI lab was a unique place, away from campus and an ecclectic group of people including software people, hardware people and musicians, a volleyball game every day and its own computing infrastructure. Did these factors help make it easier to do this sort of far reaching research or are such factors irrelevant? I suppose they are mostly irrelevant. Doug Lenat said about me that it would have been better if I hadn't bothered with the Stanford AI lab, but had sat in an office and worked on formalizing common sense in mathematical logic. I could say that Lenat would have been right if I would have been successful in formalizing common sense in mathematical logic, but I can't assure people that I would have been. Yes, I suppose the atmosphere played a role, but part of the reason for the free atmosphere was that I was unable to take the resources that DARPA had given me and put them all to work on the thing that was most important to me, which was formalizing common sense because I didn't know how to make a project to do that. So, everybody got to do what they wanted.

40. Formalizing common sense was a very difficult problem and still is, I think. That's correct. I started people on Vision, for example, partly because I've been in argument with the 1950s idea of Vision, which had to do with discrimination. I offered the slogan "Description, not just discrimination" and gave the example that, if you wanted a robot to pick something up, then you couldn't just identify it, you had to describe its shape and how it was laid out. So, we undertook to do robotics and DARPA gave us money to do it.

46. The previous question had to do with the influence of Marvin Minsky on Lisp. I asked "Did he get into Lisp?". That was a genuine question because, even in the early days, I wasn't really the boss of Lisp. Things could get into Lisp without anybody telling me. I wasn't - so to speak - the keeper of the gate. Remind me of the present question.