Programming Languages

Lisp and the Symbolic Programming Tradition

How Lisp, developed in the late 1950s, treated programs and data as lists, and why that made it a favorite for early artificial intelligence research.

On this page
  1. A different starting point
  2. Lists and the parenthesis look
  3. Ideas that Lisp brought forward
  4. Ties to AI research
  5. A family rather than one language
  6. Why it did not become mainstream, and why it still matters

A different starting point

Most early languages grew out of arithmetic: FORTRAN for formulas, COBOL for records. Lisp began somewhere else. In the late 1950s, John McCarthy, then working at MIT, was interested in how a computer could manipulate symbols and statements, not just numbers. That interest was bound up with the earliest artificial intelligence research, in which people explored whether programs could reason, plan or prove theorems.

The name Lisp comes from “list processing.” The language was designed around a simple structure, the list, which can hold numbers, words or other lists. This made it natural to represent the nested structure of sentences, logical expressions or algebra, which are the kinds of things symbolic work involves.

Lists and the parenthesis look

In Lisp, a list is written inside parentheses, with items separated by spaces. A function call looks the same way: the first item names an operation, and the rest are its inputs. Adding two numbers, for example, is written as a list that starts with the plus sign.

Because code and data share one form, a Lisp program can build another list and then treat it as a program to run. This idea, often summarized as “code is data,” allows programs to examine and rewrite other programs. It was valuable for research on symbolic reasoning, and it later influenced macro systems and tools that generate code.

The parentheses are the language’s most recognizable feature and its most common complaint. Some programmers find them tedious, while others value the regularity because the structure of a program is visible and editors can handle it systematically. Opinions differ, and neither view is simply correct.

Ideas that Lisp brought forward

Lisp introduced or popularized a number of ideas that later became common:

  • Recursion as a normal technique. Functions that call themselves suit structures like nested lists, and the language encouraged this style.
  • Garbage collection. Instead of the programmer freeing memory by hand, the system reclaims memory that is no longer used. Lisp is widely credited as an early home of this technique.
  • Functions as values. A function could be passed around like a number, a feature that many later languages adopted.
  • Interactive development. Programmers could type expressions into a running environment and see results at once, in the manner of an interpreter.

McCarthy described the language in a paper around 1960, and early implementations followed on the machines of that time. Later work by many people extended it, so the language is better understood as a collection of contributions than a single invention.

Ties to AI research

During the 1960s and 1970s, much AI research in the United States was done in Lisp. It was used for programs that manipulated symbolic algebra, played games, parsed language and represented knowledge. Research laboratories developed their own dialects and sometimes specialized computers designed to run Lisp efficiently.

These choices were not accidental. Researchers working on early programs for reasoning often needed flexible data structures that could change shape as the program ran. Lisp provided that more easily than the languages designed for numerical work. Alan Turing’s earlier discussion of machine intelligence had raised the question of whether machines could think, and symbolic programs were one way researchers tried to explore it.

It is worth being careful about the larger story. Artificial intelligence research went through periods of enthusiasm and disappointment, and there were competing approaches, including statistical methods and neural networks. Lisp was a tool of one major tradition, not a guarantee of success. Claims that the language was “the language of AI” were more accurate in some decades than others, and other languages, such as Prolog, were also used for symbolic work.

A family rather than one language

Lisp quickly split into dialects. Different institutions made different choices, which made it hard to share programs. In the 1980s, efforts to unify the family produced Common Lisp, a large language with a published standard. Another branch, Scheme, emphasized small size and clear semantics and became popular in teaching. Later, Clojure brought Lisp ideas to a newer platform.

This split is part of the story. Some programmers see the variety as a strength, since it encourages experimentation. Others see it as a barrier: libraries, tools and communities were divided, which may have made the language less attractive for large commercial projects.

Why it did not become mainstream, and why it still matters

Lisp has never been among the most widely used languages for everyday software, though it has devoted users. Reasons commonly suggested include performance concerns on early hardware, the unfamiliar syntax, the dialect fragmentation and the growth of other languages with larger ecosystems. These are explanations people offer; historians do not agree on how much each mattered.

Even so, its influence is visible. Many features that began in Lisp are now ordinary in languages such as Python and JavaScript. When a modern scripting language lets you pass a function as an argument or manages memory automatically, it is drawing on ideas that were explored decades earlier. Courses in computer science still use Lisp-family languages to show how programs can be evaluated step by step.

The symbolic tradition also shows how languages come from questions. FORTRAN asked how to make formulas easy to write. Lisp asked how a machine might handle ideas, and its answer shaped programming for decades.

The complete guide to programming languages

A Plain-Language History of Programming Languages
Read the guide

Keep exploring

Guides from other topics

All topics →