lazy comparison for equality ?

Hi - I'm a Haskell beginner and I have a problem. Let's have a list which may be normal list list1 = [1,2,3] or a circular list list2 = 1:2:list2 Now I'd like to have a function which tells me whether the given list is circular or not. This doesn't work: circ l = l l circ2 l [] = False circ2 l (_:as) | l==as = True | True = (circ2 l as) It seems that comparison l==as really compares element by element thus falling into an infinite loop. I would need to compare pointers instead of values. Does anybody know how this could be done ? Thanks.

I don't think you can write such a function. For instance, how would you know whether [1..] is circular or not? In order to know that it's not you'd need to evaluate it fully. -- Hal Daume III "Computer science is no more about computers | hdaume@isi.edu than astronomy is about telescopes." -Dijkstra | www.isi.edu/~hdaume On Wed, 24 Apr 2002 klusacek@atrey.karlin.mff.cuni.cz wrote:
Hi - I'm a Haskell beginner and I have a problem.
Let's have a list which may be normal list list1 = [1,2,3] or a circular list list2 = 1:2:list2
Now I'd like to have a function which tells me whether the given list is circular or not. This doesn't work:
circ l = l l circ2 l [] = False circ2 l (_:as) | l==as = True | True = (circ2 l as)
It seems that comparison l==as really compares element by element thus falling into an infinite loop. I would need to compare pointers instead of values.
Does anybody know how this could be done ?
Thanks.
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
participants (2)
-
Hal Daume III
-
klusacek@atrey.karlin.mff.cuni.cz