プログラミング勉強ログ

プログラミングの勉強記録

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

Yet Another Haskell 4章 (2)

4.2 Polymorphic Types 多相型関数tailはリストを引数にとるが、そのリストが内包する値の型に関わらず適用できる。 Prelude> tail [5,6,7,8,9] [6,7,8,9] Prelude> tail "hello" "ello" Prelude> tail ["the","man","is","happy"] ["man","is","happy"]これ…

Yet Another Haskell 4章 (1)

4.1 Simple TypesHaskellは静的型付け言語であり、全ての式は型を持っている。 さらに、タイプインターフェイスというシステムがあり、式の型を指定する必要がない。型はコンテキストから推論される。 HugsやGHCでは、:tコマンドを使用することで式の型を調…

Yet Another Haskell 3章 (8)

3.8 Interactivity ユーザーインタラクションに関して キーボードからの入力を受け付ける関数(scanf, cin等) は厳密な意味では関数ではない。 ユーザーの入力によって結果が変わってしまうからだ。 この問題は数学の圏論におけるモナドによって解決された。 …

Yet Another Haskell 3章 (7)

3.7 Recursion 再帰に関してC言語などでは、for文を使ったループをよく使う。 しかし、for文では破壊的変更を伴うため、Haskellでは使われない。代わりに再帰を使う。例えば、C言語で階乗を計算する関数は次のように書ける。 int factorial(int n) { int fac…

Yet Another Haskell 3章 (6)

3.6 Commentsコメントは--と{- -}で書ける。 C言語等の、//と/**/にそれぞれ対応。簡単。

Yet Another Haskell 3章 (5.2)

3.5.2 Infix インフィックスに関して(+), (*), (++)等の記号の関数は、インフィックス関数と呼ばれる。 これらは()で包むことで、通常の関数と同じように使える。 Prelude> 5 + 10 15 Prelude> (+) 5 10 15 foldlの例で(+)と書いていたのはこれが理由ですね…

Yet Another Haskell 3章 (5.1)

3.5.1 Let Bindingslet bindingに関して 今までの知識を使うと、2次方程式の根を求める関数rootsは次のように書ける。 roots a b c = ((-b + sqrt(b*b - 4*a*c)) / (2*a), (-b - sqrt(b*b - 4*a*c)) / (2*a)) let inを使うことで、関数内でのみ参照できるロ…

Yet Another Haskell 3章 (5)

3.5 Functions 関数に関して関数の定義 関数の定義は、関数名 引数 = 式 の形で書く。 例えば、ある数を2乗する関数は次のように書ける。 square x = x * x if then else 条件分岐はif then elseを使って書ける。 例えば、 signum x = if x < 0 then -1 else…

Yet Another Haskell 3章 (4)

3.4 Source Code Files プログラムの実行に関して Test.hsという名前のファイルを用意し、以下を記述する。 module Test where x = 5y = (6, "Hello")z = x * fst y これでプログラムができる。 module TestのTestの部分は、ファイル名と同じにした方が良い…

Yet Another Haskell 3章 (3.2)

3.3.2 Simple List Functions 代表的なリスト操作関数について Haskellプログラムの殆どはリストの操作である。 3つのプリミティブなリスト処理関数がmap, filter, foldr(とfoldl)である。 map mapはリストのそれぞれの要素に対して、与えた関数を適用し、そ…

Yet Another Haskell 3章 (3.1)

3.3.1 Strings 文字列に関して Haskellでは文字列はString型で表され、その実体は文字型Charのリストである。 Prelude> 'H':'e':'l':'l':'o':[]"Hello" リストは++オペレータを使って結合できる。 Prelude> [1,2] ++ [3,4,5][1,2,3,4,5] 文字列もリストなの…

Yet Another Haskell 3章 (3)

3.3 Lists リスト(list)に関して タプルは要素の数が固定されているため、予め要素の数がわからない場合には使えない。 そういうときにはリストを使う。 リストはで囲むことで表す。 ex. [1,2], [1,2,3] リストの要素は1つでもいいし、空でもいい ex. [ ], […

Yet Another Haskell 3章 (2)

3.2 Pairs, Triples and More タプル(tuple)に関して Haskellでは、タプルが使える。 タプルのそれぞれの要素は同じ型でなくても良い。 ex. (5, "hello"), (1, 2, 3, 4) 関数fstとsndが定義されていて、これを使って、pair(2-tuple)の要素を取り出すことがで…