Dan Weston | 5 Jan 22:34 2009

Re: Infinite grid

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.
Attachment (GridZipper.hs): text/x-haskell, 10 KiB
Haskell-Cafe mailing list
Haskell-Cafe <at> haskell.org