
On Oct 10, 2006, at 08:49 , Matthias Fischmann wrote:
On Tue, Oct 10, 2006 at 08:10:44PM +0800, falseep@gmail.com wrote:
To: haskell-cafe@haskell.org From: falseep@gmail.com Date: Tue, 10 Oct 2006 20:10:44 +0800 Subject: [Haskell-cafe] beginner's problem about lists
Hi all,
I'm trying to implement a function that returns the shorter one of two given lists, something like shorter :: [a] -> [a] -> [a] such that shorter [1..10] [1..5] returns [1..5], and it's okay for shorter [1..5] [2..6] to return either.
Simple, right?
However, it becomes difficult when dealing with infinite lists, for example, shorter [1..5] (shorter [2..] [3..]) Could this evaluate to [1..5]? I haven't found a proper implementation.
Again it's ok for shorter [2..] [3..] to return whatever that can solve the above problem correctly. An infinite list could work, I guess, but I don't know how.
a function that takes two lists and decides whether one of them is finite or not , without being given further information on the lists, does not exist.
A function that takes two lists and decides if one is finite does indeed exist. But if both are infinite you'll get partial information out. The example shorter [1..5] (shorter [2..] [3..]) is a little tricky, but certainly doable. -- Lennart