fugafuga.write

日々のログ

2018-01-01から1ヶ月間の記事一覧

すごいH本 part51

YesNo 型クラスをつくる JavaScript 的なゆるふわ真理値の型クラスをつくる class YesNo a where yesno :: a -> Bool 真理値の概念を何らかの形で含むとみなせる型の値を取り、それが true かどうかを返す。 インスタンスを定義する instance YesNo Int wher…

すごいH本 part50

祝 part 50 型クラスのサブクラス化 Num クラスの型宣言 class (Eq a) => Num a where ... Num 型クラスのインスタンスは Eq 型クラスのインスタンスである必要がある。 サブクラス作成に必要な知識はこれだけ。 多相型を型クラスのインスタンスにする 型コ…

すごいH本 part49

Eq 型クラスの内部 Eq は等値性判定ができる値の型クラス。== と /= という関数を定義している。 標準ライブラリにおける Eq 型クラスの定義 class Eq a where (==) :: a -> a -> Bool (/=) :: a -> a -> Bool x == y = not (x /= y) x /= y = not (x == y) …

すごいH本 part48

二分探索木を実装する 1つの要素が2つの子要素へのポインタを持つ 左の子は親より小さい 右の子は親より大きい それぞれの子要素は 0 or 1 or 2 個の要素を持つ 二分探索木はある要素の左側はその要素より小さく、 右側はその要素より大きいということが保証…

すごいH本 part47

再帰的なデータ構造 データ型の定義時に再帰構造を作ることができる 例としてオリジナルのリスト型を作りながら見ていく *Main> [5] [5] *Main> 5 : [] [5] *Main> [4,5,6,7] [4,5,6,7] *Main> 4 : 5 : 6 : 7 : [] リストデータ型のデータ構造としては、 空…

すごいH本 part46

型シノニムの多相化 型シノニムに型引数をとることができる type AssocList k v = [(k, v)] 型引数を部分適用すると新しい型コンストラクタが作れる type IntMap v = Map Int v こうも書ける type IntMap = Map Int Data.Map を修飾付インポートをする時は型…

すごいH本 part45

型シノニムの話 [Charl] と String は同値でこれは型シノニムを使って実装されている。型シノニムはある方に別の名前を与えて、コードやドキュメントを読みやすくする。 このように書く type String = [Char] この型宣言と toUpperString :: [Char] -> [Char…

Dell XPS13 に Ubuntu 16.04 LTS をインストールする

もとから入っている Windows10 と Ubuntu をデュアルブートする 手順 Windows回復ドライブを作成する https://support.microsoft.com/ja-jp/help/4026852/windows-create-a-recovery-drive USB に Ubuntu のイメージを入れる https://www.ubuntu.com/downloa…

Haskell で Fizzbuzz

Haskell の練習のため、Fizzbuzzを書いた。最初本当に何も書けなくてびっくりした。 fizzbuzz :: Int -> [String] fizzbuzz 0 = [] fizzbuzz x | x `mod` 15 == 0 = fizzbuzz (x-1) ++ ["FizzBuzz"] | x `mod` 3 == 0 = fizzbuzz (x-1) ++ ["Fizz"] | x `mod…

すごいH本 part44

Ord 型クラスの話 順序付け可能な型のための型クラス Ord の話。 同じ型の値を2つ比較したとき、その2つが異なる値コンストラクタから生成されているなら先に定義されているほうが小さいとみなされる。 *Main> True > False True *Main> True < False False …

すごいH本 part43

Show と Read は文字列へ変換できるもの、文字列から変換できるものの型クラス。ある型をそれらのインスタンスにしたいなら、その型の値コンストラクタにフィールドがあれば、それらの型も Show や Read に属している必要がある。 data Person = Person { fi…

すごいH本 part42

インスタンスの自動導出 型クラスはある振る舞いを定義するインターフェースである Haskell ではまずデータ型をつくり、それがどう振る舞えるかを考える 仮にその型が等値制をテストできるなら Eq型クラスのインスタンスにする 仮にその型が大小比較できるも…

fish shell でコマンドを繋げて実行したい

andを使う > docker stop ansible_web;and docker rm ansible_web それまでのコマンドが失敗した場合にorが使える > docker stop ansible_web;and docker rm ansible_web;or echo 'failed' Error response from daemon: No such container: ansible_web fail…

すごいH本 part41

三次元ベクトルの型とベクトルの演算を作る data Vector a = Vector a a a deriving (Show) vplus :: (Num a) => Vector a -> Vector a -> Vector a (Vector i j k) `vplus` (Vector l m n) = Vector (i+l) (j+m) (k+n) dotProd :: (Num a) => Vector a -> V…

すごいH本 part40

型コンストラクタの話 data Maybe a = Nothing | Just a aが型引数でMaybeは型コンストラクタという。型コンストラクタからMaybe Int, Maybe Char, Maybe Stringなどの型を作ることができる。 Haskell には型推論があるので、たいてい明示的に型コンストラク…

git の untracked files を消したい場合

git

消されるファイルを確認する git clean -n 消す git clean -f -f は必須 パスを指定して消す git clean -f <path></path>

すごいH本 part39

レコード構文 人物のデータ型を作る data Person = Person String String Int Float String String deriving (Show) フィールドは、名前、苗字、年齢、身長、電話番号、好きなアイスクリームの味 となっている。 人物を作成してみる *Shapes> let guy = Pers…

すごいH本 part38

Shape をShapesモジュールとしてエクスポートする module Shapes ( Point(..) , Shape(..) , area , nudge , baseCircle , baseRect ) where data Point = ... ... ... Shape(..)と書くと、Shapeの全ての値コンストラクタがエクスポートされる。後から値コン…

すごいH本 part37

データ型の続き Point データ型 二次元空間の点を表現する data Point = Point Float Float deriving (Show) data Shape = Circle Point Float | Rectangle Point Point deriving (Show) 値コンストラクタが1つしかないデータ型は、値コンストラクタ名とデー…

すごいH本 part36

新しいデータ型を自分で作る dataキーワードを使う。 標準ライブラリでのBool型の定義 data Bool = False | True 等号の前が型の名前、等号の後が値コンストラクタ 値コンストラクタは、型が取り得る値の種類のこと。 長方形と円の図形を型として表現する。 …

すごいH本 part35

階層的モジュール モジュールには階層構造を与えることができる。 Geometry.hsを分割する。Geometryディレクトリを作成する。 Geometry/Sphere.hs module Geometry.Sphere ( volume , area ) where volume :: Float -> Float volume radius = (4.0 / 3.0) * …

すごいH本 part34

モジュールを作る Geometry.hs module Geometry ( sphereVolume , sphereArea , cubeVolume , cubeArea , cuboidArea , cuboidVolume ) where sphereVolume :: Float -> Float sphereVolume radius = (4.0 / 3.0) * pi * (radius ^ 3) sphereArea :: Float -…

すごいH本 part33

今週のお題「2018年の抱負」 Data.Mapの話 連想リストを使うをMapを使うということにする。Data.Mapはキーが順序付けされていることを利用して、効率よくキーを配置したりキーにアクセスしたりできる。 Data.MapはPreludeやData.Listと競合する名前をエクス…

すごいH本 part32

あけおめ。今年もHaskellやっていきます。 キーから値へのマッピング 連想リストでキーと値のペアを作成できる。 phoneBook = [("betty", "555-2938") ,("bonnie1", "334-8878") ,("bonnie2", "334-8878") ,("bonnie3", "334-8878") ,("bonnie4", "334-8878"…