David House wrote:
On 19/10/06, Brandon Moore <[EMAIL PROTECTED]> wrote:
isIdentity xs = xs == takeLengthOf xs [1..]
where takeLengthOf xs ys = zipWith const ys xs
You probably mean zipWith (flip const) xs ys.
Either way, as long as I didn't write "zipWith const xs ys".
for finite lists,
takeLengthOf xs ys == take (length xs) ys
This ruins the laziness again:
Hugs.Base> let takeLengthOf xs ys = take (length xs) ys; isIdentity xs
= xs == takeLengthOf xs [1..] in isIdentity (1:3:2:[4..10000])
False
(210064 reductions, 278075 cells)
Hugs.Base> let takeLengthOf = zipWith (flip const); isIdentity xs = xs
== takeLengthOf xs [1..] in isIdentity (1:3:2:[4..1000])
False
(60 reductions, 114 cells)
It's meant as an explanation, and partial specification:
Prelude> let takeLength xs ys = zipWith const ys xs
Prelude> Test.QuickCheck.test (\xs ys -> takeLength xs ys == take
(length xs) ys)
OK, passed 100 tests.
This reminds me that QuickCheck only generates finite lists.
Brandon
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe