9.3.2. Разрешение ветвления Добавим еще одну, последнюю инструкцию генерации строк, разрешающую черепахе «снова находить дорогу с места остановки» - с какой-либо более ранней точки рисунка. Такое свойство позволяет черепахе делать ветвеподобные рисунки, наподобие ветвей дерева, когда из одной точки исходит несколько

9.3. Создание строк и кривые Пеано форм. Средства для реализации этого свойства просты: нам нужен символ, который предписывает черепахе «запомнить текущее положение» для дальнейшего использования, и еще символ, который будет возвращать черепаху в это положение.

Добавим к языку соответственно символы ' [' и ']', придав им следующий смысл:

' [': saveTurtlе() <- записать текущее состояние черепахи.

']': restoreTurtleO <- установить состояние черепахи в ранее записанное значение.

Что входит в понятие «состояние черепахи»? У черепахи имеются координаты, и она «повернута» в некотором направлении, поэтому ее состояние определяется текущими координатами (CP) и текущим направлением (CD): Состояние черепахи - {CP, CD}.

Удобно записывать последние состояния черепахи в стек, поэтому создадим черепаший стек (turtle stack), который может выглядеть так:

(1,3,5,22), 45 <- вершина черепашьего стека (0,7, -2,7), 30 (6,0,4,3), 180

Данный код означает, что самым последним состоянием, которое заталкивалось в стек, были текущие координаты (1,3, 5,22) и текущее направление 45°, а до него было записано состояние CP - (0,7, -2,7), CD - 30°. Если в строке встретится символ ' [', то текущее состояние черепахи проталкивается в стек для дальнейшего использования. Если же встретится символ ' ]', то из стека выталкивается верхнее значение, и состояние черепахи устанавливается равным вытолкнутому значению. Требуется добавить всего две строки к оператору switch подпрограммы produceStringO, приведенной в листинге 9.2:

'[': saveTurtleO: break; <- затолкнуть в стек текущее состояние черепахи ']: restoreTurtleO: break: «- вытолкнуть из стека состояние черепахи


⇐ Предыдущая| |Следующая ⇒