<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">Yes, that is nice, and also useful for calculating moving averages.<br><br>Thanks.<br><br>Michael<br><br>--- On <b>Fri, 4/10/09, Chad Scherrer <i>&lt;chad.scherrer@pnl.gov&gt;</i></b> wrote:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><br>From: Chad Scherrer &lt;chad.scherrer@pnl.gov&gt;<br>Subject: [Haskell-cafe] Re: Sequence differences<br>To: haskell-cafe@haskell.org<br>Date: Friday, April 10, 2009, 12:04 PM<br><br><div class="plainMail">Joe Fredette &lt;jfredett &lt;at&gt; gmail.com&gt; writes:<br><br>&gt; We can write your original function in another, cleaner way though, too, <br>&gt; since zip will "zip" to the smaller of the two lengths, so you don't <br>&gt; need to worry about doing the init and the tail, so `s` is really:<br>&gt; <br>&gt; s _ []&nbsp; = []<br>&gt; s _ [x] = [x]<br>&gt; s f
 ls&nbsp; = [f a b | (a,b) &lt;- zip ls (tail ls)]<br>&gt; <br>&gt; but there is a function which does precisely what the third case does, <br>&gt; called "zipWith" which takes a<br>&gt; binary function and two lists and -- well -- does what that list <br>&gt; comprehension does. In fact, it does<br>&gt; what your whole function does... In fact, it _is_ your function, <br>&gt; specialized a little, eg:<br>&gt; <br>&gt; yourZipWith f ls = zipWith f ls (tail ls)<br><br>A nice generalization of this that can be really useful is<br><br>movingWindow :: Int -&gt; [a] -&gt; [[a]]<br>movingWindow 1 xs = map (:[]) xs<br>movingWindow n xs = zipWith (:) xs . tail $ movingWindow (n-1) xs<br><br>So for example,<br><br>&gt; movingWindow 3 [1..10]<br>[[1,2,3],[2,3,4],[3,4,5],[4,5,6],[5,6,7],[6,7,8],[7,8,9],[8,9,10]]<br><br>Then you can write<br><br>diff :: (Num a) =&gt; [a] -&gt; [a]<br>diff = map (\[x,y] -&gt; y - x) . movingWindow 2<br><br>Hopefully the intermediate
 lists are optimized away, but I haven't done any<br>performance testing.<br><br>Chad<br><br>_______________________________________________<br>Haskell-Cafe mailing list<br><a ymailto="mailto:Haskell-Cafe@haskell.org" href="/mc/compose?to=Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br><a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br></div></blockquote></td></tr></table><br>