練習
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