by shigemk2

当面は技術的なことしか書かない

Haskell

where

where を使って計算の中間結果に名前をつけることが出来る。 ただしwhere にはスコープがあり、その関数の中でしか見えないため、注意すること。 bmiTell'' :: Double -> Double -> String bmiTell'' weight height | bmi <= 18.5 = "You're underweight" | …

ガード

関数を定義する際、引数の構造で場合分けするときにはパターンを使う。 引数の値が満たす性質で場合分けするときはガードを使う。パターンのときもそうだったが、 これを使いこなせないとif/then/elseを多用することになって可読性が著しく下がる。 ガードの…

パターンマッチ

パターンマッチはある種のデータが従うべきパターンを指定し、そのパターンに従って データを分解するために使う。Haskell では、関数を定義する歳にパターンマッチを使って関数の本体を場合分けすることが 出来る。渡された数が7かどうかを調べる(if/else使…

型クラス

型クラスは、何らかの振る舞いを定義するインターフェイスである。 ある型クラスのインスタンスである型は、その型クラスが記述する 振る舞いを実装する。もっと言うと、型クラスというのは、関数の集まりを定める。 ある型クラスに属する関数のことをその型…

型変数

head関数の型は何なのか。 Main> :t head head :: [a] -> aではfst関数の型は? Main> :t fst fst :: (a, b) -> aこの a とか bとかっていうのは、型変数と呼ばれるもので、 どんな型も取り得るということを意味する。型変数を用いた関数を多相的関数と呼ばれ…

一般的なHaskellの型

-- このように関数を型宣言することが出来る factorial :: Integer -> Integer factorial n = product [1..n] -- 宣言する型が Float と Double とで、結果が変わる circumference :: Float -> Float circumference r = 2 * pi * r circumference' :: Double…

明示的な型宣言

# :tでその式の型を教えてくれる。 Prelude> :t 'a' 'a' :: Char Prelude> :t True True :: Bool Prelude> :t "Hello!" "Hello!" :: [Char] Prelude> :t (True, 'a') (True, 'a') :: (Bool, Char) Prelude> :t 4 == 5 4 == 5 :: Boolなお、関数も型を持つ。…

タプル

タプルとは、複数の違う型の要素を格納して、1つの値にするために使う。リストとの違いは、 リスト タプル 型は同じ 違う型を格納できる サイズを変えられる サイズは固定 といったところでしょうか。 # タプルの基本 Main> (1, 3) (1,3) # 違う型の値もタプ…

リスト内包表記

数学における集合の内包的記法に近い。 # xにリストを代入して、パイプの左側でリストの各要素を2倍して出力する Main> [x*2 | x <- [1..10]] [2,4,6,8,10,12,14,16,18,20] # パイプの右側で条件を指定する(述語を指定する、つまりフィルタをかける) Main> […

レンジ

まあRubyとかにもあるよね… 範囲を指定する(数値) Main> [1..20] [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] 範囲を指定する(小文字の文字列) Main> ['a'..'z'] "abcdefghijklmnopqrstuvwxyz" 範囲を指定する(大文字の文字列) Main> ['K'..'Z'] …

リスト

リストとは一様なデータ構造である。 つまり、同じ型の要素を複数個格納できる。 整数のリストや、文字列のリストなどを作ることが出来るのだ。 Main> let lostNumbers = [4,8,15,16,23,42]Main> lostNumbers [4,8,15,16,23,42] リスト結合Main> [1,2,3,4] +…

if文

doubleSmallNumber x = if x > 100 then x else x * 2 doubleSmallNumber' x = (if x > 100 then x else x*2) + 1 else は必須のようです。 また、if文は1行でまとめられるらしいです。あと、PHPと違って、'も関数名に含めることが出来ます。

Haskellを始めるために

Haskellを始めるために必要なものはテキストエディタとHaskellコンパイラだけ。エディタは勝手に用意してください。コンパイラはThe Glasgow Haskell Compilerを使うのがポピュラーみたい。通称GHC下からダウンロードできます。 Download HaskellMacだとパッ…