Вход/Регистрация
Технология XSLT
вернуться

Валиков Алексей Н.

Шрифт:

 х2' := функция2(x1,x2,...,xn)

 ...

 xn' := функцияn(x1,x2,...,xn)

 действия(x1,x2,...,хn)

 x1 := x1'

 x2 := x2'

 ...

 xn := xn'

иначе

 вернуть результат(x1,...,хn)

Переопределение значений переменных

x
1, … ,
х
n в этом случае выполняют
n
функций:
функция
1 …,
функция
n. И если изменить значение переменной мы не могли, переопределить связанное с ней значение мы вполне в состоянии, добавив в контекст новый параметр или переменную с тем же именем.

Теперь мы можем записать весь цикл

while
как одну рекурсию:

while(x1, ..., xn) ::=

 если

выполняется условие(x1, ..., xn)

 то

действия(x1, ..., хn)

while(функция1(x1, ..., хn),

функция2(x1, ..., хn),

...,

функцияn(x1, ..., xn))

 иначе

результат(x1, ..., хn)

Теперь уже совершенно очевидно, как

while
– цикл должен выглядеть в преобразовании.

Листинг 11.10. Шаблон цикла while в общем виде

<xsl:template name="while">

 <xsl:param name="x1"/>

 <!-- ...
– ->

 <xsl:param name="xn"/>

 <xsl:choose>

<xsl:when test="условие($x1,...,$xn)">

<!-- Действия -->

<xsl:call-template name="while">

<xsl:with-param name="x1" select="функция_1($x1, ... $xn) "/>

<!-- ...
– ->

<xsl:with-param name="xn" select="функция_n($x1, ... $xn) "/>

</xsl:call-template>

</xsl:when>

<xsl:otherwise>

<xsl:value-of select="результат($x1, ..., $xn)"/>

</xsl:otherwise>

 </xsl:choose>

</xsl:template>

В качестве примера приведем

while
– цикл для программы, вычисляющей факториал. Java-код был следующим:

while (i != 0) {

 result = result * i;

 i--;

}

В этом цикле участвуют две переменные —

i
и
result
. Функции, использующиеся в этом цикле, запишутся следующим образом:

условие($1, $result) ::= ($i != 0)

функцияi($i, $result) ::= ($i - 1)

функцияresult($i, $result) ::= ($i * $result)

результат($I, $result) ::= ($result)

Именованный шаблон для этого случая будет иметь вид.

Листинг 11.11. Пример шаблона цикла while

<xsl:template name="while">

 <xsl:param name="i"/>

 <xsl:param name="result"/>

 <xsl:choose>

<xsl:when test="$i != 0">

<xsl:call-template name="while">

<xsl:with-param name="i" select="$i — 1"/>

  • Читать дальше
  • 1
  • ...
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: