[xquery-talk] problem with loops
Michael Kay
mhk at mhk.me.uk
Wed Jan 4 09:49:10 PST 2006
> Something as shown below
> ____________________________________
>
>
> declare function lcl:caller()
> {
> let $QV1 := request:request-parameter("val1","")
> let $count:= 0
> let $QV1:= lcl:tracer($QV1)
> for $d in /maps/map
> let $k:= lcl:rend($QV1)
> let $QV2:= $QV1
> let $QV1:= lcl:tracer($k)
> return $QV2
> };
> ________________________________________
>
I don't know what your various functions here are doing, but the general
approach to this kind of problem in a functional language is to use
recursion. Your loop here is a bit odd because it doesn't depend on $d, so
you seem to be using /maps/map merely to determine how many iterations there
should be. This suggests a recursive solution along these lines:
declare function f:doit (
$QV1 as item()*
$count as xs:integer ) as item()* {
if ($count eq 0)
then $QV1
else f:doit(lcl:tracer(lcl:rend($QV1), $count - 1))
}
I don't think that's precisely the logic, but it's difficult to reverse
engineer your algorithm from incorrect code.
Michael Kay
http://www.saxonica.com/
More information about the talk
mailing list