| Safe Haskell | Safe |
|---|---|
| Language | Haskell2010 |
TFwH.Chap02.ExD
Description
第2章 練習問題 D
Documentation
>>>isSquare n = (n ==) $ (^2) $ round $ sqrt $ fromIntegral n>>>nums :: [Int]; nums = [2..1000000]>>>nums == numsTrue
first :: (a -> Bool) -> [a] -> a Source #
Susan版 first は
first :: (a -> Bool) -> [a] -> a first p = head . filter p
Beaver版 first は
first :: (a -> Bool) -> [a] -> a
first p xs | null xs = error "Empty list"
| p x = x
| otherwise = firstB p (tail xs)
where
x = head xs
>>>let firstS p = head . filter p -- Susan版>>>first isSquare nums == firstS isSquare numsTrue
first' :: (b -> Bool) -> (a -> b) -> [a] -> b Source #
Susan の first' :: (b -> Bool) -> (a -> b) -> [a] -> b
first' :: (b -> Bool) -> (a -> b) -> [a] -> b first' p f = head . filter p . map f
Beaver の first'
first' :: (b -> Bool) -> (a -> b) -> [a] -> b
first' p f xs | null xs = error "Empty list"
| p x = x
| otherwise = first' p f (tail xs)
where
x = f (head xs)
>>>let first'S p f = head . filter p . map f>>>first' isSquare (subtract 1 . (2*)) nums == first'S isSquare (subtract 1 . (2*)) numsTrue