[Haskell-cafe] Infinite grid
Dan Weston
westondan at imageworks.com
Mon Jan 5 16:34:44 EST 2009
I think I found a solution to this, if you're still looking for one. See
attached code. It uses a rose tree zipper where tree depth is manhattan
distance from origin and forest width is nodes around concentric
diamonds. The code is straightforward. Polar coords (RK) are stored in
node label, with conversion to/from cartesian calculated on the fly (but
may also be stored in label if speed is more important than time).
Cyclic closed loop tests like your f below run in constant space for me.
Dan Weston
Martijn van Steenbergen wrote:
> Hello,
>
> I would like to construct an infinite two-dimensional grid of nodes,
> where a node looks like this:
>
>> data Node = Node
>> { north :: Node
>> , east :: Node
>> , south :: Node
>> , west :: Node
>> }
>
> in such a way that for every node n in the grid it doesn't matter how I
> travel to n, I always end up in the same memory location for that node.
>
> I suspect another way of saying that is that
>
>> let f = f . north . east . south . west in f origin
>
> should run in constant space. I hope this makes the problem clear. :-)
>
> How do I do this?
>
> Thanks in advance,
>
> Martijn.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: GridZipper.hs
Type: text/x-haskell
Size: 10244 bytes
Desc: not available
Url : http://www.haskell.org/pipermail/haskell-cafe/attachments/20090105/01fe7b59/GridZipper.bin
More information about the Haskell-Cafe
mailing list