[Haskell-cafe] beginner's problem about lists

Lennart Augustsson lennart at augustsson.net
Tue Oct 10 08:58:05 EDT 2006


On Oct 10, 2006, at 08:49 , Matthias Fischmann wrote:

> On Tue, Oct 10, 2006 at 08:10:44PM +0800, falseep at gmail.com wrote:
>> To: haskell-cafe at haskell.org
>> From: falseep at 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



More information about the Haskell-Cafe mailing list