<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">Hi Brent,<br><br>Efficiency aside, your code is definitely more readable.&nbsp; I flubbed that step from True/False to 0/1 using fromEnum. Haskell's grab bag has so many tools it's easy to omit one.<br><br>Thanks,<br><br>Michael<br><br><br>--- On <b>Sat, 11/6/10, Brent Yorgey <i>&lt;byorgey@seas.upenn.edu&gt;</i></b> wrote:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><br>From: Brent Yorgey &lt;byorgey@seas.upenn.edu&gt;<br>Subject: Re: [Haskell-cafe] Flagstone problem<br>To: haskell-cafe@haskell.org<br>Date: Saturday, November 6, 2010, 7:03 AM<br><br><div class="plainMail">On Thu, Nov 04, 2010 at 10:50:06AM -0700, michael rice wrote:<br>&gt; Hi,<br>&gt; <br>&gt; I've been looking at a "flagstone problem," where no two adjacent<br>&gt; n-tuples can be identical. I solved the problem with Icon
 using<br><br>Interesting stuff!<br><br>&gt; <br>&gt; ========= Here's my Haskell code ========<br>&gt; <br>&gt; import Data.Bits<br>&gt; import Data.List<br>&gt; <br>&gt; flagstone n =&nbsp; foldl (++) "" (take n (map show (f $ group [if even y<br>&gt; then 0 else 1 | y &lt;- [bitcount x&nbsp; | x &lt;- [20..]]])))<br><br>By the way, I would write this as<br><br>flagstone n = concat . take n . map show . f . group <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; . map (fromEnum . odd . bitcount) $ [20..]<br><br>You should never use foldl (++) as it is rather inefficient: you get<br>things like (((a ++ b) ++ c) ++ d) ... which ends up traversing the<br>left part of the list repeatedly.&nbsp; And list comprehensions can be nice<br>at times, but personally using map seems clearer in this case.<br><br>&gt; ========= My question ========<br>&gt; <br>&gt; A further exercise in the text:<br>&gt; <br>&gt; "Exercise 5.-(a) Define a(n) as the sum of the
 binary<br>&gt; digits in the binary representation of n. Define b(i) as<br>&gt; the number of a's between successive zeros as before.<br>&gt; Then T = b(1) b(2) b(3) b(4) ... gives an infinite<br>&gt; sequence of *seven* symbols with no repeats. (b) Write<br>&gt; a routine to generate a sequence for seven colors of<br>&gt; beads on a string with no repeats."<br>&gt; <br>&gt; I may be misreading, but does this make any sense?<br><br>Doesn't make much sense to me.&nbsp; The sum of binary digits in the binary<br>representation of n will not be zero very often... <br><br>-Brent<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>