Технология XSLT
Шрифт:
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"/>
<xsl:with-param name="result" select="$result * $i"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$result"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Вызвать этот шаблон можно следующим образом:
<xsl:template match="/">
<xsl:call-template name="while">
<xsl:with-param name="i" select="6"/>
<xsl:with-param name="result" select="1"/>
</xsl:call-template>
</xsl:template>
Результатом будет, естественно, число
720
. Цикл for
Частным случаем цикла
while
является цикл for
. В разных языках программирования for
имеет различную семантику; мы будем рассматривать циклы for
вида for (int i = 0; i < n; i++) { ... }
в языках Java и С или
for i := 0 to n-1 do begin ... end;
в Pascal. Иными словами, нас будет интересовать циклическое выполнение определенных действий при изменении значения некоторой переменной (называемой иногда индексом цикла) в интервале целых чисел от 0 до n включительно.
Цикл
for
может быть определен через while
с использованием следующих условных и изменяющих функций: условие($i, $n,$x1,...,$хk) :: = ($i < $n)
функцияi($i, $n, $x1, ... , $xk) ::= ($i + 1)
функцияn($i, $n, $x1, ..., $xk) :: = ($n)
Шаблон
for
в общем виде будет выглядеть как. Листинг 11.12. Шаблон цикла for в общем виде
<xsl:template name="for">
<xsl:param name="i" select="0"/>
<xsl:param name="n"/>
<!-- Другие переменные -->
<xsl:param name="x1"/>
<!-- ...
– ->
– ->
<xsl:param name="xk"/>
<xsl:choose>
<xsl:when test="$i < $n">
<!-- Действия -->
<xsl:call-template name="for">
<xsl:with-param name="i" select="$i + 1"/>
<xsl:with-param name="n" select="$n"/>
<!-- Другие переменные -->
<xsl:with-param" name="x1" select функция1($i, $n, $x1, ..., $xk) "/>
<!-- ...
– ->
– ->
<xsl:with-param name="xk" select="функцияk($i, $n, $x1, ..., $xk)"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="результат($i,$n,$x1,...,$xk)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
В качестве примера цикла
for
приведем шаблон, вычисляющий n
первых чисел Фибоначчи. Числа Фибоначчи — это рекуррентная последовательность вида
1 1 2 3 5 8 13 21 ...
и так далее, где каждое последующее число определяется как сумма двух предыдущих.
Для вычисления
n
первых чисел Фибоначчи мы можем использовать две переменные current
и last
, соответствующих текущему число и числу, полученному на предыдущем шаге соответственно. Функции, переопределяющие эти переменные, совершенно очевидны: функцияlast($i, $n, $last, $current) ::= ($current)
функцияcurrent($i, $n, $last, $current) ::= ($current + $last)
Поделиться:
Популярные книги
Мы – Гордые часть 8
8. Стальные яйца
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Идеальный мир для Лекаря 12
12. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Барон переписывает правила
10. Закон сильного
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Неудержимый. Книга X
10. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гранд империи
3. Страж
Фантастика:
фэнтези
попаданцы
альтернативная история
5.60
рейтинг книги
Неудержимый. Книга III
3. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Адаптация
2. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Офицер империи
2. Страж [Земляной]
Фантастика:
боевая фантастика
попаданцы
альтернативная история
6.50
рейтинг книги
Наследник с Меткой Охотника
1. Десять Принцев Российской Империи
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Как я строил магическую империю 6
6. Как я строил магическую империю
Фантастика:
попаданцы
аниме
фантастика: прочее
фэнтези
5.00
рейтинг книги
Цеховик. Книга 2. Движение к цели
2. Цеховик
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
С Д. Том 16
16. Сердце дракона
Фантастика:
боевая фантастика
6.94
рейтинг книги
Варяг
1. Варяг
Фантастика:
альтернативная история
9.10
рейтинг книги
Дорогами алхимии
2. Под знаком Песца
Фантастика:
альтернативная история
аниме
5.00