class program { define half-turn() { turnleft(); turnleft(); } define turnright() { iterate(3) { turnleft(); } } define goto-top() { while (frontIsClear) { move(); } turnright(); } define new-row() { half-turn(); while (frontIsClear) { move(); } turnleft(); move(); turnleft(); } define next-cell() { if (frontIsClear) { move(); } else { if (rightIsClear) { new-row(); } else { turnoff(); } } } define search-and-count(gum) { if (nextToABeeper) { while (nextToABeeper) { pickbeeper(); } iterate (gum) { putbeeper(); } next-cell(); search-and-count(succ(gum)) } next-cell(); search-and-count(gum); } program() { goto-top(); search-and-count(1); } }