Se está acercando a este problema desde un punto de vista imperativo.
En XQuery puede establecer los valores de las variables, pero nunca puede cambiarlas.
La forma correcta de hacer algoritmos de tipo iterativo es con una función recursiva:
declare funciton local:most($sequence, $index, $value, $count)
{
let $current=$sequence[$index]
return
if (empty($current))
then $value
else
let $current-count = count(index-of($current, $sequence))
return
if ($current-count > $count)
then local:most($sequence, $index+1, $current, $current-count)
else local:most($sequence, $index+1, $value, $count)
}
pero una mejor manera de abordar el problema es mediante la descripción del problema de una manera no iterativo. En este caso, de todos los valores distintos en su secuencia, quiere el que aparece el número máximo de veces de cualquier valor distinto.
La frase o comentario anterior traducido en XQuery es
let $max-count := max(for $value1 in distinct-values($sequence)
return count(index-of($sequence, $value1)))
for $value2 in distinct-values($sequence)
where (count(index-of($sequence, $value2)) = $max-count
return $value2
Buena pregunta nuevamente (+1). Y la respuesta es una expresión de una línea de XPath ... intentará hacerlo aún más corto. –