The Lisp programming language is strange, amazing, and beautiful. Some say it is the most elegant and powerful language ever created. You can learn all the basics in a few minutes, but the language is also subtle and sophisticated and learning it can bring you face-to-face with the underlying structure of thought. For decades, Lisp was the main language for artificial intelligence research and it was also the basis for two important teaching languages– Scheme and Logo. Recently, aspects of the Lisp way of thinking have also shown up in the United States’ Next Generation Science Standards. In this episode I look at where this language came from, how it works, and how it became part of the national discussion about education.
Show notes, images, and resources:
Here are some basic examples of Lisp code. This first example just adds two numbers. Note that the statement is really just a list.
(plus 2 2)
Here is a more complicated example that shows a function definition, a conditional, and the infamous lambda function. This function raises a number
q to the
s power. Note that the
power function appears in its own definition. This is called recursion and it is an important part of Lisp programming.
(def power (lambda (s q) (cond ((eq s 0) 1) (t (times q (power q (next-smaller s)))))))
For a real sense of the flavor and power of Lisp, check out the code for Lisp’s “Meta-circular” evaluator. This is a Lisp function that evaluates Lisp functions. It also turns out to be almost identical to John McCarthy’s original mathematical description of the language. You can jump right into the deep end.
For more on the technical history of Lisp, see John McCarthy, “History of Lisp,” Stanford AI Laboratory Memo, 1979. and Guy L. Steele and Richard P. Gabriel, “The Evolution of Lisp,” ACM SIGPLAN Notices 28, 3 (March 1993).
For the original description of the language, see John McCarthy, “Recursive Functions of Symbolic Expressionsand Their Computation by Machine, Part I,” Communications of the ACM 3(4):184-195. and John McCarthy, “A basis for a mathematical theory of computation”. In Computer Programming and formal systems, 1963.
For more on Scheme, see Gerald Jay Sussman and Guy Lewis Steele, Jr’s Lambda Papers. For more on the Structure and Interpretation of Computer Programs, check out the book or an archived online version of the course.
For a lot more on the development of logo, and all the people involved, see the LogoThings webpage. You’ll find interviews with Solomon, footage from early experiments, and a lot more. Also, check out Seymour Papert’s original Logo papers, and his book, Mindstorms: Children, Computers, And Powerful Ideas, New York : Basic Books, 1980. You can learn more about Cynthia Solomon at Constructing Modern Knowledge or in her book Computer Environments for Children: A Reflection on Theories of Learning and Education, MIT Press, 1988.
For more on computational thinking, see Seymour Papert, “An exploration in the space of mathematics educations”. International Journal of Computers for Mathematical Learning 1 and Jeanette Wing, “Computational thinking”. Communications of the ACM 49 (3): 33. You can learn about the translation of those ideas into the science standards in the National Research Council’s “Report of a Workshop on The Scope and Nature of Computational Thinking” and you can see “computational thinking” in the final standards. I’d like to thank Michelle Paulsen for turning me on to the importance of computational thinking in NGSS.