変な処理があれば修正してください。

ループ1

問題文

times 0 action = return ()
times n action = action >> times (n-1) action

main = do
    5 `times` putStrLn "Hello World!"

ループ2

問題文

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!"

FizzBuzz

問題文

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)

クイックソート

問題文

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]

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS