from a single traversal of a data structure. E.g.
mean l = sum l / length l
==@#
mean l = s/n
where
(s,n) = sumLen l
sumLen [] = (0,0)
sumLen (x:xs) = (s+x, n+1)
where
(s,n) = sumLen xs
In
procedural languages this technique is known as
calculate several results.
Another form of tupling transformation is used to avoid
repeated evaluation where a function generates several
identical calls to itself. By analysing the pattern of
for these identical calls to share results. E.g.
fib 0 = 1
fib 1 = 1
fib n = fib (n-1) + fib (n-2)
==@#
fib n = v where (_,v) = fibt n
fibt 0 = (1,1)
fibt n = (u+v,u) where (u,v) = fibt (n-1)
(1995-01-12)