<div dir="ltr"><div class="gmail_default" style="font-family:georgia,serif;font-size:small">The operation you are trying to is abstracted in Haskell using the higher-order function <i>map. </i>Commonly, we want to take a list or other sequence of data and perform an operation (function) on each element of the list. In non-functional languages, we would need to explicitly write a for-loop through each element (ie</div>

<div class="gmail_default" style="font-family:georgia,serif;font-size:small">for (int i = 0; i < array.length; i++) {</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">     array[i] = doSomething(array[i]); </div>

<div class="gmail_default" style="font-family:georgia,serif;font-size:small">}</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">

Of course in Haskell and other functional languages use of mutable state and explicit iteration aren't used in most circumstances so new functional programmers go "Iteration is the same as recursion so I'll write a recursive function instead something like:</div>

<div class="gmail_default" style="font-family:georgia,serif;font-size:small">recursiveIteration :: [a] -> [a]</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">recursiveIteration [] = []</div>

<div class="gmail_default" style="font-family:georgia,serif;font-size:small">recursiveIteration x:xs = $$ Lots of operations using x $$ : recursiveIteration xs</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">

<br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">Of course, the lazy intermediate functional programmer after writing this function a few times realizes that "I'm using a functional language, why not abstract the operations using x using a function and pass the function as a parameter. Something like this:</div>

<div class="gmail_default" style="font-family:georgia,serif;font-size:small">recursiveIterationAbstractOperations :: (a -> b) -> [a] -> [b]</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">

recursiveIterationsAbstractOperations _ [] = []</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">recursiveIterationsAbstractOperations func x:xs = func x : recursiveIterationsAbstractOperations func xs<br>

</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">This is exactly the definition of <i>map</i> in the <a href="http://hackage.haskell.org/package/base-4.6.0.1/docs/src/GHC-Base.html#map">GHC source code</a>!</div>

<div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">I would write it as a map over the outer list and then process each inner element. Something like this:</div>

<div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">discardparitybyte :: [[Bit]] -> [[Bit]]</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">

discardparitybyte = map (take 8)</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">Learning to use higher-order functions like map, foldl, and filter making functional programming great. In my mind as an intermediate Haskell programmer, when I start using direct recursion especially when using lists, I stop myself and think about a better way to structure my code so that I can write it as a combination of these and other higher order functions because they allow for more modulatrity in the code. </div>

<div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">-David</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">

On Thu, Jan 2, 2014 at 10:38 PM, Angus Comber <span dir="ltr"><<a href="mailto:anguscomber@gmail.com" target="_blank">anguscomber@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div dir="ltr"><div>I have a list like this:</div><div><br></div><div>[[1,0,0,0,1,1,1,0,0],[1,1,1,0,1,1,1,0,0],[1,0,1,0,0,1,1,0,0],[0,1,0,0,1,1,1,0,0],[0,0,1,0,1,1,1,0,0],[1,0,0,1,1,1,1,0,1]]</div><div><br></div><div>The 'inner' list is a list of 9 items.  I want to process the list so that a list of lists is returned but the 9th element in each inner list is dropped.</div>


<div><br></div><div>So the function type would be [[a]] -> [[a]]</div><div><br></div><div>So to get started I wrote a function like this:</div><div><br></div><div>discardparitybyte :: [[Bit]] -> [[Bit]]</div><div><br>


</div><div>But then not sure how to transform the inner list.</div><div><br></div><div>I know I can access the first inner element using take 1 list.  But how do I then access/manipulate this inner list?</div><div><br></div>


<div>discardparitybyte (x:xs) = take 9 ??? (take 1 xs) : discardparitybyte ???<br></div></div>
<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>
<br></blockquote></div><br></div>