2024-03-07
やること宣言
tanabe.icon
勉強中メモ
tanabe.icon
code:hs
maximum' :: (Ord a) => a -> a maximum' [] = error "maximum of empty list"
maximum' (x:xs) = max x (maximum' xs)
-- replicate Int と値を取り、複数という名の通り、その値を繰り返したリストを返す
-- 基底部は0回繰り返すときの値を返す
replicate' :: Int -> a -> a replicate' n x
| n <= 0 = []
| otherwise = x: replicate' (n-1) x
-- take Int とリストを取り、そのリストの先頭から指定した数だけ取り出す
take' n _ -- 何でも受け付ける。ここではリストの中身は関係ないのでワイルドカードを使っている。nは最終的に0になるまで減っていく
| n <= 0 = [] -- 基底部。0以下の数を指定されたら空リストを返す
take' _ [] = [] -- リストが空の場合も空リストを返す
take' n (x:xs) = x : take' (n-1) xs -- リストの先頭から順に取り出していく
-- reverse はリストを逆順にする
reverse' [] = []
reverse' (x:xs) = reverse' xs ++ x -- repeat は値を受け取り、それを無限に繰り返すリストを返す
repeat' x = x : repeat' x
-- zip は2つのリストを受け取り、対応する要素をペアにして返す
zip' _ [] = [] -- どちらかのリストが空になったら終了
zip' [] _ = [] -- どちらかのリストが空になったら終了
zip' (x:xs) (y:ys) = (x, y) : zip' xs ys -- 両方のリストから要素を取り出してペアにしていく
-- elem は値とリストを受け取り、その値がリストに含まれているかどうかを返す
elem' :: (Eq a) => a -> a -> Bool elem' a [] = False -- リストが空になったらFalse
elem' a (x:xs)
| a == x = True -- リストの先頭の要素がaと等しい場合はTrue
| otherwise = a elem' xs -- そうでない場合は再帰的に調べる
やったこと
tanabe.icon
再帰を読んでる
残りはクイックソートとアルゴリズムに関する節