Some users of Gambit have experienced problems using the REPL to debug programs which create circular structures because the external representation used by default by "write", "pretty-print", and "pp" does not handle circular structures or deeply nested structures very well (i.e. infinite loop).
This issue can be addressed by changing the readtable associated with the REPL's output port. This can be done with code such as:
(define (repl-ctrl sharing-allowed? max-write-level max-write-length) (let ((port (repl-output-port))) (output-port-readtable-set! port (let* ((rt (output-port-readtable port)) (rt (readtable-sharing-allowed?-set rt sharing-allowed?)) (rt (readtable-max-write-level-set rt max-write-level)) (rt (readtable-max-write-length-set rt max-write-length))) rt))))
(repl-ctrl #t 2 5)
It is convenient to place this code in the ~/gambcini.scm file so that it does not have to be entered each time gsi is invoked.
The above code will use the SRFI 38 syntax for shared/circular structures. It will also stop printing parts of a structure that are beyond a nesting level of 2, or beyond a length of 5 (using an elipsis instead).
Marc