変な処理があれば修正してください。
times 0 action = return ()
times n action = action >> times (n-1) action
main = do
5 `times` putStrLn "Hello World!"
別解
main = putStr $ "おっぱい!" >> "Hello World!\n"
import System.Environment
times 0 action = return ()
times n action = action >> times (n-1) action
main = do
x <- getArgs
(read (x !! 0)) `times` putStrLn "Hello World!"
main = do
mapM_ putStrLn (map fizzBuzz [1..100])
fizzBuzz :: Integer -> String
fizzBuzz n
| n `mod` 15 == 0 = "FizzBuzz"
| n `mod` 5 == 0 = "Buzz"
| n `mod` 3 == 0 = "Fizz"
| otherwise = show n
primesTo m = 2 : sieve [3, 5..m] where
sieve [] = []
sieve (p:xs) = p : sieve (xs `minus` [p*p, p*p+2*p..m])
minus (x:xs) (y:ys) = case (compare x y) of
LT -> x : minus xs (y:ys)
EQ -> minus xs ys
GT -> minus (x:xs) ys
minus xs _ = xs
main = do
print $ primesTo (floor 1e6)
isleap :: Integer -> Bool
isleap y
| y `mod` 400 == 0 = True
| y `mod` 100 == 0 = False
| y `mod` 4 == 0 = True
| otherwise = False
main = do
putStrLn "西暦を入力してください"
x <- getLine
putStrLn (x ++ "年はうるう年" ++ if isleap(read(x)) then "です" else "ではありません" )
import System.Environment
fibo = 0 : 1 : zipWith (+) fibo (tail fibo)
main = do
x <- getArgs
putStrLn (show (fibo !! read (x !! 0)))
pow :: Integer -> Integer -> Integer
pow _ 0 = 1
pow 0 _ = 0
pow a b = a * pow a (b-1)
main = do
putStrLn (show (pow 2 10))
pow :: Integer -> Integer -> Integer
pow 0 _ = 0
pow _ 0 = 1
pow a b = pow' 1 a b
where
pow' x a 0 = x
pow' x a b
| even b = pow' x (a*a) (div b 2)
| otherwise = pow' (x*a) a (b-1)
main = do
putStrLn (show (pow 2 1000007))
quicksort :: (Ord a) => [a] -> [a]
quicksort [] = []
quicksort (x:xs) =
let smallerSorted = quicksort[a | a<-xs, a <= x]
biggerSorted = quicksort[a | a<-xs, a > x]
in smallerSorted ++ [x] ++ biggerSorted
main :: IO()
main = print $ quicksort [5, 7, 9, 2, 1, 3, 8, 4, 6, 0]
nabeatsu :: Integer -> String nabeatsu x = if mod x 3 == 0 || elem '3' s then "Aho" else s where s = show x main :: IO () main = putStrLn . unwords $ map nabeatsu [1..100]
import Data.List (isInfixOf)
next :: String -> Char -> Char
next (x:xs) = \c -> if x == c then head xs else next xs c
next _ = id
analyze :: String -> String
analyze = head . filter (isInfixOf keyword) . iterate (map $ next chars)
where chars = "-abcdefghijklmnopqrstuvwxyz .,-"
keyword = "person"
main :: IO ()
main = putStrLn $ analyze encoded
where encoded = "qdq-gi.q-a ziatmxxitmdqibtqi-ustbi ri.qmoqrcxi.qbubu zir -ibtq\
\i-qp-qaai ripmymsqkir -ibtqi-qy dmxi ri.cnxuoi rruoumxakir -ib\
\tqiqzmobyqzbkii-q.qmxi -imyqzpyqzbi rixmeaki -puzmzoqai -i-qsc\
\xmbu zaimzpir -i btq-iymbbq-a;iz -iatmxximzgi.q-a zinqiuzimzgi\
\emgipuao-uyuzmbqpimsmuzabir -ia. za -uzsiacotiimi.qbubu zj"
import System.IO
import System.Random
import Control.Monad
game :: Int -> IO ()
game x = do
us <- getLine
case reads us of
[(u, _)] -> when (x /= u) $ do
putStrLn . ("too "++) . (++"!") $ if x < u then "big" else "small"
game x
_ -> putStrLn "invalid input!" >> game x
main :: IO ()
main = do hSetBuffering stdout NoBuffering
putStrLn "input a number!"
getStdGen >>= game . fst . randomR (1,100)
putStrLn "right!"
tailZero :: (Num a) => [a] -> [a] tailZero = zipWith (*) (1 : repeat 0) main :: IO () main = print $ tailZero [3,5,2,4,2]
import Control.Applicative pascal :: [[Integer]] pascal = [1] : map (zipWith (+) <$> ([0] ++) <*> (++ [0])) pascal main :: IO () main = mapM_ (putStrLn . map (\x -> if odd x then '*' else ' ')) $ take 32 pascal