tag value is needed to signal an empty list (everything needing that can simply point to cell 0). The principle that the cdr in a list cell must point at another list is just a convention. If both car and cdr point at atoms, that will yield a pair, usually written like (1 . 2) Instructions nil pushes a nil pointer onto the stack ldc pushes a constant argument onto the stack ld pushes the value of a variable onto the stack. The variable is indicated by the argument, a pair. The pair's car specifies the level, the cdr the position. So (1 . 3) gives the current function's (level 1) third parameter. sel expects two list arguments, and pops a value from the stack. The first list is executed if the popped value was non-nil, the second list otherwise. Before one of these list pointers is made the new C, a pointer to the instruction following is saved on the dump. join pops a list reference from the dump and makes this the new value of C. This instruction occurs at the end of both alternatives of a sel. ldf takes one list argument representing a function. It constructs a closure (a pair containing the function and the current environment) and pushes that onto the stack. ap pops a closure and a list of parameter values from the stack. The closure is applied to the parameters by installing its environment as the current one, pushing the parameter list in front of that, clearing the stack, and setting C to the closure's function pointer. The previous values of S, E, and the next value of C are saved on the dump. ret pops one return value from the stack, restores S, E, and C from the dump, and pushes the return value onto the now-current stack. dum pushes a "dummy", an empty list, in front of the environment list. rap works like , only that it replaces an occurrence of a dummy environment with the current one, thus making recursive functions possible A number of additional instructions for basic functions like car, cdr, list construction, integer addition, I/O, etc. exist. They all take any necessary parameters from the stack. See also CEK Machine Krivine machine References Further reading Danvy, Olivier. A Rational Deconstruction of Landin's SECD Machine. BRICS research report RS-04-30, 2004. ISSN 0909-0878 Field, Anthony J. Field and Peter