On Thu, 18 Sep 2003 20:16:33 +0200
Juanma Barranquero <[EMAIL PROTECTED]> wrote:

> Extremely-newbie questions:
> 
> Is there any way to know if a list is finite or infinite, other than
> doing:
> 
>   length l
> 
> and waiting forever? :)

In Haskell 98, no.  With a slightly impure extension (observable
sharing) sometimes but in general, no.  The only infinity you need to
recognize is omega and that's just an infinite (cyclic) list of
whatevers. So you -could- use observable sharing for this, but there
isn't much point to it, just use a data structure that says, "an
infinity of x". The simplest thing I would think of is to follow the
arithmetic operation exactly.

data SN
  = Zero 
  | Up 
  | Down 
  | SN :+: SN
  | SN :*: SN 
  | SN :^: SN
  | Omega SN

omega = Omega Up
iota = Up :+: Omega Down
twoThirds = Omega (Up :+: Down)
twoOmega = Omega Up :+: Omega Up
omegaSquared = Omega Up :*: Omega Up
omegaToTheOmega = Omega Up :^: Omega Up

_______________________________________________
Haskell-Cafe mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to