Часто можно найти примеры прекрасного кода XSLT, особенно когда XSLT используется в качестве функционального языка программирования .
Примеры см. в этой статье в FXSL 2.0 - библиотека функционального программирования для XSLT 2.0.
В качестве языка FP XSLT также является декларативным языком . Это, помимо прочего, означает, что каждый заявляет, указывает существующие отношения.
Такое определению часто не требует никакого дополнительного кода для получения результата - оно само является собственной реализацией, или определением исполняемого файла или спецификацией исполняемого файла .
Вот небольшой пример .
Это выражение XPath 2.0 определяет" Максимум Главный фактор натурального числа ":
if(f:isPrime($pNum))
then $pNum
else
for $vEnd in xs:integer(floor(f:sqrt($pNum, 0.1E0))),
$vDiv1 in (2 to $vEnd)[$pNum mod . = 0][1],
$vDiv2 in $pNum idiv $vDiv1
return
max((f:maxPrimeFactor($vDiv1),f:maxPrimeFactor($vDiv2)))
Чтобы произнести это по-английски , максимальный простой множитель числа pNum
является самим числом, если pNum
является простым, в противном случае если vDiv1
и vDiv2
являются двумя факторами pNum
, то максимальный простой коэффициент pNum
равен большее из максимальных простых множителей: vDiv1
и vDiv2
.
Как мы используем это для фактического расчета Максимального простого множителя в XSLT? Мы просто обернем определение выше в <xsl:function>
и ... получим результат!
<xsl:function name="f:maxPrimeFactor" as="xs:integer">
<xsl:param name="pNum" as="xs:integer"/>
<xsl:sequence select=
"if(f:isPrime($pNum))
then $pNum
else
for $vEnd in xs:integer(floor(f:sqrt($pNum, 0.1E0))),
$vDiv1 in (2 to $vEnd)[$pNum mod . = 0][1],
$vDiv2 in $pNum idiv $vDiv1
return
max((f:maxPrimeFactor($vDiv1),f:maxPrimeFactor($vDiv2)))
"/>
</xsl:function>
Затем можно вычислить MPF для любого натурального числа , например:
f:maxPrimeFactor(600851475143)
= 6857
Что касается эффективности, ну, это преобразование занимает всего 0,109 сек .
Другие примеры элегантного и эффективного кода XSLT :