int result = 1;
while (i != 0) {
result = result * i;
i--;
}
return result;
}
Π ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ»ΠΈΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ i ΠΎΡ 0, Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠΌΠΈ β ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ result Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ i, ΠΈ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π° 1.
Π¦ΠΈΠΊΠ» while Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ Π² XSLT ΠΈΡΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎ ΠΏΠΎΡΠΎΠΌΡ ΠΊΠ°ΠΊ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΊΠΎΡΠΎΡΡΡ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠ΅Π΅, ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΈΠΊΠ»Π° ΠΈΠ»ΠΈ Π½Π΅Ρ. ΠΠ°Π΄ΠΈΠΌ Π΄ΡΡΠ³ΡΡ ΠΎΠ±ΡΡΡ Π·Π°ΠΏΠΈΡΡ ΡΠΈΠΊΠ»Π° while, Π²ΡΠ΄Π΅Π»ΠΈΠ² ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ :
ΠΏΠΎΠΊΠ°
Π²Π΅ΡΠ½ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅(x1,x2, ...,xn)
Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ
x1' := ΡΡΠ½ΠΊΡΠΈΡ1(x1,x2,...,xn)
Ρ 2' := ΡΡΠ½ΠΊΡΠΈΡ2(x1,x2,...,xn)
...
xn' := ΡΡΠ½ΠΊΡΠΈΡn(x1,x2,...,xn)
Π΄Π΅ΠΉΡΡΠ²ΠΈΡ(x1,x2,...,Ρ n)
x1 := x1'
x2 := x2'
...
xn := xn'
ΠΈΠ½Π°ΡΠ΅
Π²Π΅ΡΠ½ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ(x1,...,Ρ n)
ΠΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ x1, β¦ , Ρ 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"/>
<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)
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, Π½ΡΠΆΠ½ΠΎ Π»ΠΈΡΡ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π€ΠΈΠ±ΠΎΠ½Π°ΡΡΠΈ, ΡΠ°Π±Π»ΠΎΠ½ for ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠΎΡΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° xsl:if Π²ΠΌΠ΅ΡΡΠΎ xsl:choose.
ΠΠΈΡΡΠΈΠ½Π³ 11.13. Π¨Π°Π±Π»ΠΎΠ½, Π²ΡΡΠΈΡΠ»ΡΡΡΠΈΠΉ ΡΠΈΡΠ»Π° Π€ΠΈΠ±ΠΎΠ½Π°ΡΡΠΈ<xsl:template name="for">
<xsl:param name="i" select="0"/>
<xsl:param name="n"/>
<xsl:param name="last" select="0"/>
<xsl:param name="current" select="1"/>
<xsl:if test="$i < $n">
<xsl:text> </xsl:text>
<xsl:value-of select="$current"/>
<xsl:call-template name="for">
<xsl:with-param name="i" select="$i + 1"/>
<xsl:with-param name="n" select="$n"/>
<xsl:with-param name="last" select="$current"/>
<xsl:with-param name="current" select="$last + $current"/>
</xsl:call-template>
</xsl:if>
/xsl:template>
ΠΡΠ·Π²Π°Π½Π½ΡΠΉ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΡΠ°Π±Π»ΠΎΠ½Π΅ ΠΊΠ°ΠΊ:
<xsl:template match="/">
<xsl:call-template name="for">
<xsl:with-param name="n" select="6"/>
</xsl:call-template>
</xsl:template>
ΡΡΠΎΡ ΡΠ°Π±Π»ΠΎΠ½ ΡΠΎΠ·Π΄Π°ΡΡ Π² Π²ΡΡ ΠΎΠ΄ΡΡΠ΅ΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ:
1 1 2 3 5 8
ΠΡΠΈΠ²Π΅Π΄Π΅ΠΌ Π΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ»Π΅ΠΌΠ΅Π½Ρ option Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠ°Π·.
ΠΠΈΡΡΠΈΠ½Π³ 11.14. ΠΡΠ²ΠΎΠ΄ 10 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² option<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform'">
<xsl:template match="/">
<xsl:call-template name="for">
<xsl:with-param name="n" select="10"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="for">
<xsl:param name="i" select="0"/>
<xsl:param name="n"/>