[Haskell-cafe] Re: Wikipedia on first-class object
Jules Bean
jules at jellybean.co.uk
Fri Dec 28 06:23:59 EST 2007
Peter Gammie wrote:
> On 28/12/2007, at 5:50 PM, Miguel Mitrofanov wrote:
>
>>> Right, so when I say to GHCi:
>>
>>> Prelude> take 5 [1..]
>>
>>> and it says:
>>
>>> [1,2,3,4,5]
>>
>>> then it really has computed the entirety of the infinite sequence
>>
>>> [1..], and not some approximation?
>>
>>
>> Of course not! In fact, it doesn't even compute the value "1". It just
>> juggles with the bytes somehow, so that it seems that it computes the
>> whole sequence and then applies "take 5". But does it really matter if
>> it computes 5 integers, or 10, or the whole sequence, at least if we
>> are not concerned about performance?
>
> I'll bite. So what do you expect:
>
> take 5 [1,2,3,4,5,undefined]
>
> to do? How about:
>
> take 5 (1:2:3:4:undefined)
>
> ?
>
> So it does seem to matter how much of the list it evaluates...
take evaluates as much as it needs of the spine but not any of the elements.
Even then, take is a good producer, so
take 1 . take 5 $ 1:2:3:4:undefined
will converge.
But I think you know all this and your questions are rhetorical :)
Jules
More information about the Haskell-Cafe
mailing list