Referentially Transparent Scheme

What features from R5RS would have to be removed if one wanted a referentially transparent scheme?

In Lisp In Small Pieces, Christian states that assignment, side-effects, and continuations break referential transparency. So I would assume that one would have to remove any destructive operators such as set!, set-car!, set-cdr!, as well as removing call/cc.

I also thought that defining global variables (via define) would be removed though I would imagine if you dropped the availability of set! the use of define in the global context would not be much of an issue.

Am I looking at this the right way? Are there other things that have side-effects in Scheme that I am not aware of? Is there more information on this topic that I can look and learn more?

Best regards,

MJ Stahl

Sequentiality, laziness, Haskell, and cyclic block diagrams

More shameless self-promotion from me: here's a paper I've been working on that may be of interest to LtU readers, "Many cyclic block diagrams do not need parallel semantics."

It is about parallel vs. sequential semantics as applied to an interesting block diagram. (Here the adjectives "parallel" and "sequential" are used as they are in discussions of the full abstraction problem rather than in discussions of concurrency.) It also introduces a block diagram extension to Haskell I've been working on.