練習

ANSI Common Lisp 2章「Lispの世界へようこそ」 - もちから。いい例題です。僕もHaskellで書いてみました。

module Main (main) where

-- 2つの数を引数として,大きい方を返す関数。
myMaximum :: Ord a => [a] -> a
myMaximum []  = error "myMaximum: empty list."
myMaximum [x] = x
myMaximum (x : xs)
  | x > x'    = x
  | otherwise = x'
  where
    x' = myMaximum xs

-- 正の整数を引数とし,その数のドットを表示。
dot :: Int -> String
dot = flip replicate '.'

-- リストに"a"がいくつ含まれているか。
summit :: [String] -> Int
summit = length . filter (== "a")

main :: IO ()
main = do
  print $ myMaximum [1, 5, 4, 2, 3]       -- => 5
  print $ dot 10                          -- => ".........."
  print $ summit ["a", "", "b", "c", "a"] -- => 2