On Wed, 8 Dec 2004, Daniel Fischer wrote: > Am Mittwoch, 8. Dezember 2004 10:22 schrieben Sie: > > On Tue, Dec 07, 2004 at 06:44:33PM +0100, Daniel Fischer wrote: > > > ms :: [Integer] -> [Integer] > > > ms as = zipWith (+) (zipWith (*) as (1:ms as)) (0:1:ms as) > > > > This version seems to be faster, but I don't know if it addresses your > > concern: > > > > ms as = let l = zipWith (+) (zipWith (*) as (1:l)) (0:1:l) in l > > > > Best regards, > > Tomasz > > Thanks, > indeed, this seems to produce roughly the same performance as 'ps' and I have > a vague idea why this is better than 'pms', given that 'ms' is slower than > 'ps'. But that is what baffled me in the first place, particularly because in > hugs, things are different.
Is it possible and senseful for a compiler to extract common sub-expressions? Naively I think that for a given tree of an expression it is efficiently possible to find all common sub-trees. Referential transparency would assure that equal expressions have the same value, so they can be replaced by the same object. E.g. the example above could be automatically transformed to: ms as = let tmp0 = zipWith (+) (zipWith (*) as tmp1) (0:tmp1) tmp1 = 1:tmp0 in tmp0 _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe