Unyablog.

のにれんのブログ

Haskell入門5日目

五日目

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!

今日は出石そば食べました。美味しかったです。

4.2

  • repliciate

はじめに書いたのは

nonyReplicate :: Int -> a -> [a]

nonyReplicate 0 y = []
nonyReplicate x y = y : nonyReplicate (x-1) y

だけどガード使ってもよさそう

  • take

    • はじめ一発で書こうとしたけど無理そうなのでやめた。
    • ガードとパターンマッチを柔軟に使うのが大事ですね〜
  • reverse

    • 再帰、確かに再代入してない。javaとかだったら絶対forで書いてそう。
    • reverse関数結局わからずに答え?見た。
    • nonyReverse (x:xs) = nonyReverse xs ++ [x] って無限ループする気がするんですが。。。
      • と思ったら xs に対して nonyReverse してるじゃん。 xs ++ [x] と勘違いしてた。
  • repeat

    • 雑に書いてホンマに動くんかって感じで書いたら動いた。
    • まあ確かに動きますね
    • これ途中で止めるの厳しそう。しばらく考えてみたけど分からなかった
  • zip

    • 引数2個で返すの一個じゃん??????とか思って混乱してた
    • 最初の型の定義するとこがちょっと分からなかったけどなんだかんだできた。
  • elem

    • シュシュッと書けてよかった

やった!!!すごいHaskellより短いすごいコードがかけたぞ!!!(((

nonyElem :: (Eq a) => a -> [a] -> Bool
nonyElem a [] = False
nonyElem a (x:xs) = a == x || nonyElem a xs
  • とにかく再帰楽しい。再帰むずいむずいって言ってたらつよい人が for のほうがムズイって言っててつよいなあって思った。

4.3

クイックソート、何度も聞いたことあるし何かで実装したことある気がする(pythonかなんかで)

  • なお内容は毎回忘れる模様
  • 三分ぐらい考えたらかけた。
    • リスト内包表記最高

ちなみに書いたコードはこちらになります

quickSort :: (Ord a) => [a] -> [a]
quickSort [] = []
quickSort (x:xs) = quickSort [y | y <- xs, y < x] ++ [x] ++ quickSort [y | y <- xs, y > x]
  • ってドヤ顔しようとしたら、いろんな文字入れると見事に削られてしまった
    • <= にするのが正解でした。
    • < にすると複数あるの絞れるという知見を得たのでよいでしょう((
    • >= も付け加えたら大量増殖した。そりゃそうだ。

4.4

  • よっしゃ任せろ

感想

  • 帰納法って感じだった
  • 答え見ずに自分で再帰関数書けてたので成長を感じた