rot :: Int -> [Char] -> [Char]
rot 0 a = a
rot n a = rot (n-1) [rotsucc x | x <- a]
rotsucc :: Char -> Char
rotsucc 'z' = 'a'
rotsucc 'Z' = 'A'
rotsucc a = if elem a (['a'..'z'] ++ ['A'..'Z']) then (succ a) else a
myzipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
myzipWith f [] a = []
myzipWith f a [] = []
myzipWith f a b = (f (head a) (head b)) : (myzipWith f (tail a) (tail b))
myflip :: (a -> b -> c) -> b -> (a -> c)
myflip f x y = f y x
mymap :: (a -> b) -> [a] -> [b]
mymap f a = [f x | x <- a]
myfilter :: (a -> Bool) -> [a] -> [a]
myfilter f a = [x | x <- a, f x]
mytakeWhile :: (a -> Bool) -> [a] -> [a]
mytakeWhile f a = if f (head a) then [head a] ++ (mytakeWhile f (tail a)) else []
collazlist :: Int -> [Int]
collazlist a
| a == 1 = [a]
| even a = a:(collazlist (div a 2))
| otherwise = a:(collazlist (3*a+1))
collaztrue :: Int -> Bool
collaztrue n = (length (collazlist n)) > 15
collaz :: [Int] -> [Int]
collaz = filter collaztrue
lambda15 :: [a] -> Bool
lambda15 = \a -> (length a)>=15
isqrt :: Int -> Int
isqrt = floor . sqrt . fromIntegral
isprime :: Int -> Bool
isprime n
| n <= 1 = False
| otherwise = foldr (\a b -> ((rem n a) /= 0 && b)) True [2..(isqrt n)]
-- filter isprime [1..] で無限素数リストを得る