In Lisp, you can't pass the variable by reference, you can only pass the value (which might itself be a reference). You can wrap the variable in a structure or in a cons cell, or you can pass the setter function.

Paul Donnelly wrote:And what if the argument you pass to HELLO isn't a variable?

The most intuitive thing to do is to treat the argument as the «place» (generalized reference, see http://www.lispworks.com/documentation/ ... /05_aa.htm). E.g., (hello (car x)) should change the car of x, (hello (slot-value some-object 'some-slot)) should change the slot of the object.But the same syntax is impossible to use (unless hello is a macro), so argument should be wrapped into some other form (that creates the reference).

Paul Donnelly wrote:And what if the argument you pass to HELLO isn't a variable?

The most intuitive thing to do is to treat the argument as the «place» (generalized reference, see http://www.lispworks.com/documentation/ ... /05_aa.htm). E.g., (hello (car x)) should change the car of x, (hello (slot-value some-object 'some-slot)) should change the slot of the object.But the same syntax is impossible to use (unless hello is a macro), so argument should be wrapped into some other form (that creates the reference).

What when the argument is the result of a more complex computation, or is constant, or is supplied by a higher-order function rather than explicitly by the programmer? My point is that while OP might like modifying the argument, it's less generally useful than the way it is normally done. Of course if you do have a good reason, places are fine for their purpose.