I&#39;ll bite. The source of tails is pretty elegant:<div><br></div><div><span class="Apple-style-span" style="font-family: Calibri; font-size: medium; "><pre><span class="hs-definition">tails</span>                   <span class="hs-keyglyph" style="color: red; ">::</span> <span class="hs-keyglyph" style="color: red; ">[</span><span class="hs-varid">a</span><span class="hs-keyglyph" style="color: red; ">]</span> <span class="hs-keyglyph" style="color: red; ">-&gt;</span> <span class="hs-keyglyph" style="color: red; ">[</span><span class="hs-keyglyph" style="color: red; ">[</span><span class="hs-varid">a</span><span class="hs-keyglyph" style="color: red; ">]</span><span class="hs-keyglyph" style="color: red; ">]</span>
<a name="line-746"></a><span class="hs-definition">tails</span> <span class="hs-conid">[]</span>                <span class="hs-keyglyph" style="color: red; ">=</span>  <span class="hs-keyglyph" style="color: red; ">[</span><span class="hs-conid">[]</span><span class="hs-keyglyph" style="color: red; ">]</span>
<a name="line-747"></a><span class="hs-definition">tails</span> <span class="hs-varid">xxs</span><span class="hs-keyglyph" style="color: red; ">@</span><span class="hs-layout" style="color: red; ">(</span><span class="hs-keyword" style="color: blue; ">_</span><span class="hs-conop">:</span><span class="hs-varid">xs</span><span class="hs-layout" style="color: red; ">)</span>        <span class="hs-keyglyph" style="color: red; ">=</span>  <span class="hs-varid">xxs</span> <span class="hs-conop">:</span> <span class="hs-varid">tails</span> <span class="hs-varid">xs</span></pre>
</span><br><div class="gmail_quote">On Mon, Jun 27, 2011 at 1:30 PM, Costello, Roger L. <span dir="ltr">&lt;<a href="mailto:costello@mitre.org">costello@mitre.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hi Folks,<br>
<br>
Below is a divide-and-conquer implementation of the &quot;tails&quot; function.<br>
<br>
Notice the two patterns (x:y:xs) and (x:[]). And notice that (x:y:xs) is used by the &quot;length&quot; function and again by the &quot;splitAt&quot; function. That doesn&#39;t seem elegant. Can the function be simplified and made beautiful?<br>

<br>
/Roger<br>
<br>
<br>
tails&#39;               ::   [a] -&gt; [[a]]<br>
tails&#39; (x:y:xs)   =   map (++zs) (tails&#39; ys) ++ tails&#39; zs<br>
                           where m        =  length (x:y:xs)<br>
                                       n         =  m `div` 2<br>
                                      (ys,zs)  =  splitAt n (x:y:xs)<br>
tails&#39; (x:[])      =    [[x]]<br>
<br>
_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/beginners" target="_blank">http://www.haskell.org/mailman/listinfo/beginners</a><br>
</blockquote></div><br><br clear="all"><br>-- <br>Michael Xavier<br><a href="http://www.michaelxavier.net">http://www.michaelxavier.net</a><br>
<div class="vimiumHUD" style="right: 150px; zoom: 100%; opacity: 0; display: none; "></div></div>