[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: set in Scheme?
David Chin asks, ``Does anyone know how to do the equivalent of a Common Lisp
"set" in Scheme? In particular, I would like to be able to pass different
symbols as arguments to a function and then set! or define them inside the
function. Is this style of programming (global side-effects for function calls)
contrary to the Scheme philosophy?''
I won't stick my neck out by claiming to speak for ``the Scheme philosophy'',
but I will point out some semantic difficulties with this idea. The problem is
that in most Schemes there is no single ``global'' value for a symbol. Rather,
there are a set of environments in which each symbol is bound to a corresponding
set of values. Thus, it is difficult to know what such a ``set''-like operator
would do. Most Schemes with multiple first-class environments, however, do
provide a way to define or set! a symbol in a *particular* environment. For
example, the T dialect has the procedure *LSET for this purpose.
For your application, perhaps you can change things so that, rather than passing
symbols around, you pass procedures of one argument that set a particular
variable to the value of that argument. Thus, rather than passing the symbol
FOO around, you might pass this procedure:
(lambda (v) (set! foo v))
The receiving procedure would then simply apply its argument to the desired
value, as opposed to calling the non-existent ``set'' operation.
Hope this helps,
Pavel