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