1.リストの要素数を数える関数
myLength [] = 0 myLenght (x:xs) = 1 + (myLength xs)
2.型シグネチャをつける
ghciで:tするだけ。
myLength :: [a] -> Int myLength [] = 0 myLenght (x:xs) = 1 + (myLength xs)
3.リストの平均
mean :: Fractional a => [a] -> a mean [] = 0 mean xs = (sum xs) / (fromIntegral $ length xs)
4.リストを回文に (ex. [1,2,3] -> [1,2,3,3,2,1])
palindrome :: [a] -> [a] palindrome xs = xs ++ (reverse xs)
5.回文かどうか判定
isPalindrome :: Eq a => [a] -> Bool isPalindrome xs = xs == reverse xs
6.リストのリストをサブリストの長さでソート(Data.ListモジュールのsortByを参考にして)
sortByを実装しろとか言われたらちょっと分からない。できる人はすぐできるんだろうけど。
import Data.List sortByLengthOfList :: [[a]] -> [[a]] sortByLengthOfList xs = sortBy compare xs where compare a b | length a >= length b = GT | length a < length b = LT
7.区切りになる値でリストのリストを連結
intersperse :: a -> [[a]] -> [a] intersperse _ [] = [] intersperse _ [xs] = xs intersperse sep (xs:xss) = xs ++ [sep] ++ intersperse sep xss
8.二分木の高さ
data Tree a = Node a (Tree a) (Tree a) | Empty deriving (Show) t = Node "x" Empty (Node "y" Empty Empty) treeHeight Empty = 0 treeHeight (Node root left right) = 1 + max (treeHeight left) (treeHeight right)
問題9〜12は幾何学の問題。この分野は得意じゃないのでちょっと勉強する。