タグ

Haskellと関数型に関するigrepのブックマーク (2)

  • 状態と参照透明性 - みゆっきのにっき

    状態は難しい 変数 入出力 難しいなら無くしてしまえばよい 状態を排除 参照透明性 言語処理系の外側の状態はどうしようもないので 一意型 モナド 状態は難しい 状態は難しい。 例えば変数。変数の値が自由に変更可能なら、ある変数を使用する際には、その変数を変更可能な全ての場所を考慮しなければならない。 global変数のようなスコープの広すぎる変数で混乱した、確保した領域を二重に開放するコードを書いた、といった経験は皆あるはずである。 難しいなら無くしてしまえばよい 状態の問題を解決したい。その手段の1つとして、状態を無くしてしまえばよい、という極端なものがある。 変数を無くしてしまう。外部の状態の利用、つまりファイルの操作だとかは当然禁止する。 変数を無くしてもチューリング完全の意味で計算できる範囲に影響はない1ので問題はない。 そうすると、どの関数も、引数が同じならいつ計算しても値が同じ

  • 関数型言語での関数の基礎知識 - あどけない話

    関数型言語での関数について、Haskell を用いて説明します。 関数の型 関数の型は、-> を使って書きます。例えば、Int を Char に変換する chr という関数の型は、以下のようになります。 chr :: Int -> Char 一引数の関数の型は、まぁこんなもんだと思えるでしょう。びっくりするのは、引数が増えたときです。たとえば、replicate という関数の型を見てみましょう。 replicate :: Int -> a -> [a] replicate は、第二引数で指定されたデータを第ー引数に指定された個数分用意して、リストにして返す関数です。([] は配列ではなく、リストです。) 次のように動きます。 > replicate 3 "foo" → ["foo","foo","foo"] a は型変数といって、任意の型を取れます。なじめない人は、具体的な型を当てはめてみ

    関数型言語での関数の基礎知識 - あどけない話
    igrep
    igrep 2011/04/08
    概ねOCamlをかじった時に知ったっぽいと思ったけどやっぱHaskellはちゃうね。
  • 1