[comp.lang.scheme] Side effects in scheme

mkatz@GARLIC.STANFORD.EDU (Morris Katz) (09/05/90)

   In article <1543@anaxagoras.ils.nwu.edu> krulwich@ils.nwu.edu (Bruce Krulwich) writes:
   >        (define ...
   >       ...
   >           (let -loop-name- (... vars ...)
   >            ...
   >               (another-proc ...
   >                 (lambda (arg) (-loop-name- arg))  ; success continuation
   >                 (lambda () (-loop-name- var))     ; failure continuation
   >                 )  ))

   The question about whether or not the above is functional hinges on
   one issue - how is the let loop implemented (heap space was mentioned
   in the article). If it is implemented with a let/set! approach (the
   normal macroexpansion for letrec), then it is NOT functional. 

I disagree!  If a construct has a functional implementation, any implementation
for which there is no operation that can demonstrate that it is not functional
is effectively functional.  (Sorry about all the negations, but I can't seem to
find any better phraseology at the moment.)  My interpreter might implement +
using side effects for some perverse reason, but that does not necessarily make
+ an imperative operator.
-------------------------------------------------------------------------------
Morry Katz
katz@cs.stanford.edu
-------------------------------------------------------------------------------