*Edit:* I’ve found out that the book was written for Mathematica 7, which was a pretty long time ago. It boils down to changes in syntax most probably, but simple renaming to lower lettercase does not work.

Following Stan Wagon’s *Mathematica in Action*, chapter 19, subsection 19.2, I’ve run into problems.

- I cannot redefine ReIm[z] as is done on p.496, Mathematica just states that
*Tag ReIm in ReIm[z_] is protected*. - Trying the same procedure on that page and over the course of the following two pages with a function that I’ve called reim[z], it’s not possible to get the hyperbolic triangle.
- I’m then left to use ReIm[z] for the triangle, which will work regardless of whether I “redefine” or not.
- Those four definitions of LFT functions and turning off the division-by-zero message off, nothing happens once again.
- And then, regardless of what I do in the previous 4 steps, I can not get the tessellation shown on p.498. Instead, I get one of two shown below.

What I think happens is that at the time of writing the book, ReIm was not a legitimate function in Mathematica. It was probably implemented sometime afterwards and now it inadvertently affects this code as well. Is it possible to “add on” to a predefined definition in Mathematica? Or to somehow bypass these errors with a new function?

The problematic ReIm[z] part:

`ReIm[z_]:=N[{Re[z], Im[z]}]; ReIm[ComplexInfinity]={0,1000}; Attributes[ReIm]=Listable; `

The LFT (Linear Fractional Transformation) involving ReIm[z] which seems to do nothing, together with the turning off of the errors:

`LFT[mat_List][z_?NumericQ] := reim[Divide @@ (mat - {z, 1})]; Off[Power::infy, General::dbyz, Divide::infy]; `

The most problematic part of the code:

`polys = Table[{FaceForm[Hue[Random[], 0.6]], Polygon[LFT[w][triangle[]]]}, {w, G}]; `

^This lists out errors of the type: “\emph{Indeterminate expression $ \frac{0}{0}$ encountered}.” While thisĖ gives one of the two attached pictures:

`Graphics[{EdgeForm[Black], polys}, PlotRange -> {{-3, 4}, {0, 2.4}}, Frame -> True, FrameTicks -> False] `