fugafuga.write

日々のログ



Haskell

すごいH本 part12

case 式 コード中のどこででもパターンマッチが使えるようになる。case は式である。 head' :: [a] -> a head' xs = case xs of [] -> error "error." (x:_) -> x 関数のパターンマッチは case のシンタックスシュガーとなっている。 head' :: [a] -> a head…

すごいH本 part11

let 式 どこでも変数を束縛できる let 式が作る束縛は局所的でガード間で共有されない パターンマッチが使える 例 cylinder :: Double -> Double -> Double cylinder r h = let sideArea = 2 * pi * r * h topArea = pi * r ^ 2 in sideArea + 2 * topArea l…

すごいH本 part10

パート10までやってきた自分えらい ガード 引数の構造で場合分け パターンマッチを使う 引数の値が満たす性質で場合分け ガードを使う 例 bmiTell :: Double -> String bmiTell bmi | bmi <= 18.5 = "You're underweight, you emo, you!" | bmi <= 25.0 = "Y…

すごいH本 part9

やっていきのこころ パターンマッチ パターンに従ってデータを分解するときに使う luckey :: Int -> String luckey 7 = "Luckey!!!" luckey x = "Unluckey!!!" パターンが上から下の順で評価される パターンが合致するとそのパターンの本体が実行される *Mai…

すごいH本 part8

やっていきの精神 型変数 *Main Lib> :t head head :: [a] -> a aが型変数 aはどんな型もとり得る 型変数を用いた関数は多相的関数と呼ばれる 型変数はa,bなど1文字で表現されることが多い 型クラス 何らかの振る舞いを定義するインターフェース 型は型クラ…

すごいH本 part7

やっていき 型 コンパイル時に全ての型がわかっている 型推論がある 型を調べる 式の型が:t でわかる。::以降が型となる。 *Main Lib> :t 'a' 'a' :: Char *Main Lib> :t 3 3 :: Num t => t *Main Lib> :t "Hello" "Hello" :: [Char] *Main> :t boomBangs bo…

すごいH本 part6

今日もやっていき タプル 違う型の要素を格納して1つの値にする サイズが固定 *Main> (1,3) (1,3) *Main> (3, 'a', "hoooo!!!") (3,'a',"hoooo!!!") サイズ2のタプルをペアという サイズ3のタプルをトリプルという 長さが同じでも違う型を含むタプルを違うも…

すごいH本 part5

引き続き リスト内包表記 集合の内包的記法の概念に近いもの、らしい 集合論 - Wikibooks よくわからんので見てゆくことにする これがリストの内包表記らしい *Main Lib> [x*2 | x <- [1..10]] [2,4,6,8,10,12,14,16,18,20] リスト[1..10]から要素を取り出す…

すごいH本 part4

引き続きすごいH本やっていく レンジ 数字 アルファベット などを列挙できる要素をリストにする *Main Lib> [1..20] [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] *Main Lib> ['a'..'z'] "abcdefghijklmnopqrstuvwxyz" *Main Lib> ['I'..'Q'] "IJK…

すごいH本 part3

前回に引き続きやっていく blog.tokoyax.com Haskell のリスト 同じ型の要素を複数個格納できる *Main Lib> let lostNumbers = [4,8,15,16,23,42] *Main Lib> lostNumbers [4,8,15,16,23,42] リストの連結 *Main Lib> [1,2,3,4] ++ [5,6,7,8] [1,2,3,4,5,6,7…

すごいH本 part2

前の記事でも少しふれたが、Haskell における関数についての続き blog.tokoyax.com 関数を組み合わせる doubleUs x y = x * 2 + y * 2 ↓ doubleUs x y = doubleMe x + doubleMe y このように関数を組み合わせて表現してゆく。 これは関数型でなくてもやって…

すごいH本入門 ―イントロダクション―

Elixir を触っていると関数型プログラミングに興味が湧いてきたので、すごいH本を読んでいこうと思う。 この本を読むことで関数型プログラミングの基本的な考え方を得たい。 そんでもって、めちゃくちゃエロいらしい。 今日は1日目。 イントロダクション Has…