Gerald Jay Sussman Created 2026-10-18 Updated 2026-11-05
Gerald Jay Sussman is a computer scientist whose work includes the design and explanation of systems expressed as programs. With Hal Abelson and Julie Sussman, he authored Structure and Interpretation of Computer Programs by Harold Abelson and others, a text that develops programming abstraction, recursion and models of program execution through Scheme.[ref]
One useful distinction in the text is between the shape of a procedure's source and the computation it generates. A syntactically recursive procedure can produce an iterative process when no deferred operations accumulate. That makes the execution model, rather than the presence of a self-call alone, central to reasoning about storage.[ref]
Figure 1.
Portrait of Gerald Jay Sussman
. Phoebe, own photograph at MIT, 29 January 2024; existing Commons crop. Creative Commons Attribution-Share Alike 4.0 International., via Wikimedia Commons. Source.
Hal Abelson Created 2026-10-24 Updated 2026-11-05
Hal Abelson is a computer scientist whose work uses computer programming as a way to express and investigate ideas. With Gerald Jay Sussman, he developed the course behind Structure and Interpretation of Computer Programs by Harold Abelson and others. Its use of Scheme connects concrete programs with programming abstraction, recursion and the organization of computations.[ref]
His work on Logo and computational geometry also brought mathematical exploration into programming education. Rather than treating a program only as a sequence of commands, this approach lets a learner examine how a compact procedure generates an entire family of behaviours.[ref]
Figure 1.
Portrait of Hal Abelson
. Joi, Flickr photograph, 23 June 2011; Commons records a successful CC BY 2.0 Flickr review. Creative Commons Attribution 2.0 Generic., via Wikimedia Commons. Source.
Julie Sussman 2026-10-18
Textbook collaborator credited with Harold Abelson and Gerald Jay Sussman on Structure and Interpretation of Computer Programs by Harold Abelson and others. The publisher credits her as “With”; the CSAIL author profile also identifies her as a coauthor.[ref][ref]
Official publisher profile: mitpress.mit.edu/author/julie-sussman-2581
Recursion (computer science) Created 2026-10-13 Updated 2026-10-18
Recursion solves a problem by invoking the same procedure on smaller instances, with base cases answered directly. For merge sort, an empty or one-entry array is already sorted, and every larger array is split into two shorter parts. The decreasing lengths justify termination; a self-call without a progress rule would not suffice.
A recursive procedure refers to itself, directly or through another procedure. A recursive call starts another invocation, with its own arguments and local variables; the caller can wait for its returned output. A base case supplies an answer without further recursive calls. To establish algorithm termination, also show that every recursive call progresses in a well-founded relation. “Smaller” means smaller in that chosen relation: argument values need not all decrease, and the arguments need not even be numbers.
Recursion is especially expressive when a data structure already decomposes into smaller structures. A binary tree has two child subtrees, so structural recursion can follow its shape. A short rule for each case can describe an entire traversal or computation. The distinction between a recursive procedure and the recursive process it generates helps connect that compact description to its resource use.[ref]
Recursive procedure Created 2026-10-18 Updated 2026-10-20
A procedure whose definition invokes itself directly or indirectly. This is a property of its programming language syntax. It does not determine whether execution accumulates unfinished operations.[ref]
Recursive process 2026-10-18
A computation that retains pending operations while further calls run, then completes those operations as results return. A recursive procedure can instead describe an iterative process: passing an updated accumulator onward may leave no arithmetic pending. Avoiding growing call stack storage in that case depends on the implementation. A fixed number of variables also does not imply fixed storage in bits when their integer values grow.[ref]