Самый простой — и, вероятно, самый легкий для чтения — подход — это фильтровать последовательность с помощью функции по модулю, но у этого есть недостаток, заключающийся в том, что все 150 значений должны быть созданы:
(1 to 150)[. mod 14 = 0]
Используя подход, который использовал @prker, вы должны самостоятельно вычислить верхнюю границу. idiv
— оператор целочисленного деления.
for $i in (1 to 150 idiv 14)
return $i * 14
Используя XQuery 3.0, вы также можете вместо этого использовать оператор применения !
:
(1 to 150 idiv 14) ! (. * 14)
Или, наконец, с помощью рекурсивной функции:
declare function local:n-sequence($from as xs:integer, $to as xs:integer, $step as xs:integer) {
if ($from > $to)
then ()
else ($from, local:n-sequence($from + $step, $to, $step))
};
local:n-sequence(1, 150, 14)
person
Jens Erat
schedule
19.05.2014