→関数プログラミング
モナドのメリット モナドはHaskellのプログラムにおいて、特に入出力回りで活躍する仕組みです。 関数プログラムの本体から副作用を安全に分離することができ、計算戦略をプログラム全体にばら撒くことをせずに、一箇所にまとめることができます。 モナドの具体例 モナドの具体例1 例えば、二つの関数getLineとputStrLn関数を考えます。 この二つはどちらもIO型で定義される、副作用の存在する 関数です。 そして、この二つの関数を用いて、「getLineで得た行を、putStrLnで出力したい」とします。 通常のコードであれば、次のように書き表すと思います。 import System.IO …
classキーワード 型クラスの定義 Haskellでは等号、非等号を表すためにEqというクラスを使用しています。 class Eq a where (==), (/=) :: a -> a -> Bool x == y = not (x /= y) x /= y = not (x == y) 上記のEqクラスから以下の情報が読み取れます。 等号が使用可能な型は、Eqを継承している それぞれの型は、== と/= メソッドが実装される。 ==と/=は二つの同じ型を取り、最終的にBoolが返される。 デフォルトで、==と/=が定義されているが、それぞれが依存関係にあるため、どちらかのメソッドは定義…
Haskellのdataについて Haskellのdata コマンドは既存の型を組み合わせて新しい型を作ることが出来ます。 data Animal = Cat Int scream :: Animal -> String scream (Cat number ) = concat (replicate number "ニャー") main = print $ scream(Cat 2) 上記の例ではAnimalという普遍的なデータ型を作成し、 その中の一種類としてCatとIntを組み合わせたもの(numberの意図は頭数)を指定しています。 そして関数screamの型宣言ではAnimalからS…
変数宣言letの具体例 Haskellにおいて変数を宣言する方法は、letを使用する方法があります。 main = do let name = "田中太郎" print(name) ちなみに、一つのletの中で複数の変数を宣言するには{}を使用します。 main = do let {name = "田中太郎"; id = 1000} print(name) print(id) let構文 let構文の全体像は以下の通りです。 let { var1=value1 ; var2=value2; .. } in 式 または do let var1=value1; let var2=value2; l…
Haskellにおける条件式 Haskellにおいて、条件文という言葉よりも「条件式」といったほうが適切かもしれません。 条件文という言葉は手続き型言語やオブジェクト指向型言語では使われますが、Haskellにおいては「関数」が第一級オブジェクトとして扱われます。 ifも「if文」というよりは「if式」と表現し、値が返却するという点でも関数と呼んだほうが良いです。 以下はif式の具体例ですが、参考演算子のように値を返却していることに留意してください。 main = do let test_point = 95 let result = if test_point > 60 then "合格" …
関数型プログラミングとは何か? 副作用について サンプルコード 高階プログラミング 関数型プログラミングのメリット バグが少なくなる 数学に近い lispが高い評価を受けていたのは、研究の道具として計算機科学の世界で最も複雑な種類の問題を解くために使われていたことだ。 今回はlispの進んだ要素の一つ、関数型プログラミングについて学ぶ。 関数型プログラミングとは何か? ものすごく大雑把に言えば、関数だけでプログラミングを組み立てるスタイルのことだ。 しかし、ここでの関数には通常のプログラミングよりもさらに特化された意味がある。 数学者が使う「関数」という言葉と全く同じ意味で使っているということ…
コードモード データモード コンスセルとリスト Lispには、コードモードとデータモードの2つのモードがあります。これらのモードは、LispのREPL(Read-Eval-Print Loop)で使われることが多く、Lispの開発環境での開発に役立ちます。 コードモード コードモードは、Lispのコードを入力するモードです。Lispのコードは、式(Expression)と呼ばれる単位で構成されます。式は、関数呼び出しやリスト、数値、文字列、シンボルなどから構成されます。 コードモードでは、プログラムのコードを入力し、それを評価して結果を得ることができます。式を入力すると、Lispはその式を評価…