[Haskell-cafe] Re: Something like scan1

Achim Schneider barsoap at web.de
Wed Jun 18 10:54:07 EDT 2008


Henning Thielemann <lemming at henning-thielemann.de> wrote:

> 
> On Wed, 18 Jun 2008, Achim Schneider wrote:
> 
> > Is there a generalisation of scan1, such that eg.
> >
> > foo (+) [0,1] (1,2) = [0,1,1,2,3,5,8,13,...]
> >
> > ?
> 
> What is the (1,2) for? 
> 
Specifying the relative indexes an element depends on. Ideally, it
should be generalised for n-ary functions.

> I could think of
> foo f = List.unfoldr (\ xt@(x:xs) -> Just (x, xs ++ [f xt]))
> 
> foo sum [0,1]  =  [0,1,1,2,3,5,8,13,21,34,...
>
I should elaborate:

foo (+) [0,1,4] (1,2) = _|_, as 4 isn't 0+1
foo (+) [0,1] (2,3) = [0,1,_|_,1,_|_,_|_]
foo (+) [0,1,1,2,3,5] (1,2) = [0,1,1,2,3,5,8,13,...]
foo (+) [1] (1,1) = [1,2,4,8,16,32,...]


If you allow for inverse functions, you could even say

foo (+-) [0,...,3,..] (1,2) = [0,0,0,...,0,0,1,1,2,3,5,...]


It seems like I'm searching for some primitive that lets me combine
lists and currying. Think of passing a matrix, with each column (or row,
if you prefer) separately uniquely typed, into a function.

-- 
(c) this sig last receiving data processing entity. Inspect headers for
past copyright information. All rights reserved. Unauthorised copying,
hiring, renting, public performance and/or broadcasting of this
signature prohibited. 



More information about the Haskell-Cafe mailing list