I am delving into Structure and Interpretation of Computer Programs. Right off the bat, there are two words being used that seem to denote some specific concepts: computational processes and procedures. I have a simple question. What are the definitions of these terms in the context of Abelson and Sussman's usage?
1 Answers
Well, procedures in the sense of SICP are the code you write, even if you call that code functions or classes. If that code defines some operations on data, not the data itself.
Procedures are defined 1.1 The Elements of Programming
In programming, we deal with two kinds of elements: procedures and data... Informally, data is ``stuff'' that we want to manipulate, and procedures are descriptions of the rules for manipulating the data.
The contrast between procedures and processes is similar to the one between programs in your computer hard drive, and in it's RAM. A program stored in a file you call executable, or maybe script, program that you launched and it is in memory is called process. How that process will behave will depend on the procedure that defines it, and on the environment in which it runs: available resources, evaluation model (normal-order and applicative order evaluation will generate different processes for the same procedure), etc. A small finite procedure could produce an infinite process or a process that fails to continue because of a lack of resources.
I'm not sure I'll be able to explain this better than the book, so here is a quote from 1.2 Procedures and the Processes They Generate:
A procedure is a pattern for the local evolution of a computational process. It specifies how each stage of the process is built upon the previous stage. We would like to be able to make statements about the overall, or global, the behavior of a process whose local evolution has been specified by a procedure. This is very difficult to do in general, but we can at least try to describe some typical patterns of process evolution.

- 7,635
- 8
- 47
- 79