[Haskell-beginners] First code review

Brent Yorgey byorgey at seas.upenn.edu
Sun Feb 24 01:27:13 CET 2013


On Sun, Feb 24, 2013 at 12:15:05AM +0100, Emanuel Koczwara wrote:
> Hi,
> 
> Dnia 2013-02-23, sob o godzinie 17:35 -0500, Brent Yorgey pisze:
> > On Sat, Feb 23, 2013 at 04:39:53PM +0100, Emanuel Koczwara wrote:
> > > Hi,
> > > 
> > > Note: Following code is a solution for a problem from hackerrank.com
> > > (Category: Artifical Intelligence / Single Player Games / Bot saves
> > > princess).
> > 
> > Looks pretty good overall.  One note is that using lists of lists for
> > Grid and Heuristic will be slow, especially Heuristic since you do
> > lots of repeated lookups.  For small grids it really doesn't make much
> > difference, but if you wanted to run it on larger grids you might
> > notice.  Since both the Grid and Heuristic values are created once and
> > then used in a read-only fasion, this is a perfect opportunity to use
> > arrays: see 
> > 
> >   http://hackage.haskell.org/packages/archive/array/latest/doc/html/Data-Array.html
> > 
> > Using read-only arrays is really quite simple (as opposed to
> > read/write arrays which require a monad of some sort).
> > 
> 
>   Thank you, I will try Arrays. Handling list of lists is very hard for
> me. Please look at this code: http://hpaste.org/82925 (indexedGrid and
> getDirty). In C/C++ it's very natural for me, here it looks like i'm
> missing something.

In C/C++ you get to use arrays with indexing.  Lists are entirely
different, so it's no surprise that something natural in C/C++ should
feel foreign here.  Indeed, I don't think lists are the right data
structure for you to be using.  If you use arrays I think this code
will become much simpler too.

A good rule of thumb is that lists should be primarily used as a
*control structure* (i.e. to describe something that would be done
with a loop in an imperative language).  If you find yourself using
lists as a *data structure*, especially a random-access one, you
probably ought to be using something else instead (Data.Sequence,
arrays, ...)

-Brent



More information about the Beginners mailing list