<div dir="ltr"><div>Since we introduced list comprehensions, people have been using them to generate arguments for polyhedron. But they've run into a problem where the list is nested too deeply. So a convention of using the function 'flatten' has arisen.</div><div><br></div><div>I've been thinking about different ways to eliminate the need for an auxiliary flatten function, and I've come up with an idiom that works today, without any language changes.</div><div><br></div><div>Here's the "before" code, using flatten (I forget the original author):</div><div><br></div><div>r = 10;<br>h = 20;<br>w = 2;<br>s = 2;<br>step = 4;<br>vertices = [for (a=[0:step:360]) [<br>  [r*cos(a), r*sin(a), 0],<br>  [r*cos(a), r*sin(a), h + s*sin(a*6)],<br>  [(r-w)*cos(a), (r-w)*sin(a), h + s*sin(a*6)],<br>  [(r-w)*cos(a), (r-w)*sin(a), 0]<br>]];<br>nv = 4*360/step;<br>indices = [for (a=[0:360/step]) [<br>  [(4*a+0)%nv, (4*a+1)%nv, (4*a+5)%nv, (4*a+4)%nv],<br>  [(4*a+1)%nv, (4*a+2)%nv, (4*a+6)%nv, (4*a+5)%nv],<br>  [(4*a+2)%nv, (4*a+3)%nv, (4*a+7)%nv, (4*a+6)%nv],<br>  [(4*a+3)%nv, (4*a+0)%nv, (4*a+4)%nv, (4*a+7)%nv]]];<br>function flatten(list) = [ for (i = list, v = i) v ];<br>polyhedron(flatten(vertices), flatten(indices));</div><div><br></div><div>Now here is the "after" code, which eliminates the need for 'flatten'.</div><div><br></div><div>r = 10;<br>h = 20;<br>w = 2;<br>s = 2;<br>step = 4;<br>vertices = [<br>  for (a=[0:step:360])<br>    for (pt = [<br>      [r*cos(a), r*sin(a), 0],<br>      [r*cos(a), r*sin(a), h + s*sin(a*6)],<br>      [(r-w)*cos(a), (r-w)*sin(a), h + s*sin(a*6)],<br>      [(r-w)*cos(a), (r-w)*sin(a), 0]<br>    ]) pt<br>];<br>nv = 4*360/step;<br>indices = [<br>  for (a=[0:360/step])<br>    for (pt = [<br>      [(4*a+0)%nv, (4*a+1)%nv, (4*a+5)%nv, (4*a+4)%nv],<br>      [(4*a+1)%nv, (4*a+2)%nv, (4*a+6)%nv, (4*a+5)%nv],<br>      [(4*a+2)%nv, (4*a+3)%nv, (4*a+7)%nv, (4*a+6)%nv],<br>      [(4*a+3)%nv, (4*a+0)%nv, (4*a+4)%nv, (4*a+7)%nv]<br>    ]) pt<br>];<br>polyhedron(vertices, indices);<br></div><div><br></div><div>I guess it is a matter of personal taste, but I hope some people find this useful.<br></div></div>