lazy comparison for equality ?

Hal Daume III hdaume@ISI.EDU
Wed, 24 Apr 2002 12:38:27 -0700 (PDT)


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
>