haskell

Haskell 勉強メモ9

セクション 中置関数に対して、セクションという機能を使って部分適用をすることができる。 divideByTen :: (Floating a) => a -> a divideByTen = (/10) *Main> divideByTen 30 3.0 これは 30 / 10 と同義。 高階関数 関数を受け取り、2回適用する関数を書…

Haskell 勉強メモ8

高階関数 Haskell は関数を引数にとったり、返り値として関数を返すことができる。このような関数を高階関数と呼ぶ。Scalaにもある。 カリー化関数 Haskellの全ての関数は、引数を1つだけ取る。今まで、複数引数を取っているように見えたものは全てカリー化…

Haskell 勉強メモ6

再帰 関数型言語では再帰はよく出てくる。 最大値を求める関数を考えてみる。命令的に考えると、現在の最大値を保持する変数を用意し、リストの全ての要素についてループして、変数を更新していく形になる。Scalaで書いてみると def maximum(list: List[Int]…

Haskell 勉強メモ5

let式 let 式は変数を束縛する。 let 式自身も式。式であるとは、「値を持つ」ということ。 円柱の表面積を求める。 cylinder :: Double -> Double -> Double cylinder r h = let sideArea = 2 * pi * r * h topArea = pi * r ^ 2 in sideArea + 2 * topArea…

Haskell 勉強メモ2

明示的な型宣言 Haskellの型宣言は2行で書く模様。こういう書き方は初めて。 removeNonUppercase :: [Char] -> [Char] removeNonUppercase st = [c | c <- st, c `elem` ['A' .. 'Z']] *Main> removeNonUppercase("HelloWorld") "HW" addThree :: Int -> Int…

Haskell 勉強メモ 1

関数型プログラミングをちゃんとやろうと思って「すごいHaskellたのしく学ぼう!」を買って読み始めた。その勉強メモ。自分のメイン言語はScalaなので、気になったところを比較しながら見ていく。 内包表記 Haskellのリスト内包表記。集合の内包的記法の概念…