Scheme does not print functions. “(lambda(c) 42)” yields “#<procedure>” in MzScheme. I speculate here how procedures might be printed.
Internally a procedure is primitive or consists of compiled Mcode and an environ. The compiled code can be decompiled and free variables therein denoted by capital latin letters, and bound variables by small letters. Then the values bound by the environ to the free variables, which themselves are typically functions, would likewise be printed. Free variables bound to the same internal function would be denoted by the same capital letter and their values would not be re-printed. This converges canonically. I do not assume here an equivalence test, but merely consider values for free variables found in environs to be the same when they are the same internal representation.
I think I will make this a new source file and not assume it in the normal system.