Safe Haskell | Safe |
---|---|

Language | Haskell2010 |

# 第2章 練習問題 D

# Documentation

`>>>`

`isSquare n = (n ==) $ (^2) $ round $ sqrt $ fromIntegral n`

`>>>`

`nums :: [Int]; nums = [2..1000000]`

`>>>`

True`nums == nums`

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版`

`>>>`

True`first isSquare nums == firstS isSquare nums`

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`

`>>>`

True`first' isSquare (subtract 1 . (2*)) nums == first'S isSquare (subtract 1 . (2*)) nums`