Implementation [of geometric substitution systems]

The most convenient approach is to represent each pattern by a list of complex numbers, with the center of each square being given in terms of each complex number z by {Re[z], Im[z]}. The pattern after n steps is then given by Nest[Flatten[f[#]]&, {0}, n], where for the rule on page 189 f[z_] =(1 - I)/2 {z + 1/2, z - 1/2} (f[z_]=(1-I){z+1,z} gives a transformed version). For the rule on page 190, f[z_] = (1 - I)/2 {I z + 1/2, z - 1/2}. For rules (a), (b) and (c) (Koch curve) on page 191 the forms of f[z_] are respectively:

(0.296 - 0.570 I) z - 0.067 I - {1.04, 0.237} N[1/40 {17 (Sqrt[3]-I) z, -24 + 14 z}] N[((1/Sqrt[3] - 1)(I + {1, -1})/2 - I - (1 + {I, -I}/Sqrt[3]) z)/2]