by shigemk2

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

予習メモ #functional_shibuya

予習

www.shigemk2.com

6章 純粋関数型の状態

  • 乱数の生成

6.1 副作用を使った乱数の生成

  • scala.util.Random
  • 状態の更新は副作用として実行されるため、これらのメソッドは参照透過ではありません

6.2 純粋関数型の乱数の生成

  • 次の状態の計算を、プログラムの他の部分に対する新しい状態の通知から切り離す
  • カプセル化
  • 線型合同法(linear congruential generator)

f:id:shigemk2:20150620180325p:plain

6.3 ステートフル API の純粋化

  • API に実際に何かを変化させるのではなく、次の状態を計算させる
  • 純粋関数を使って次の状態を計算すると、データを実際にその場で変化させることができないため、効率性が低下する
  • 純粋関数を使ったプログラミングにより、設計空間は大幅に単純化

6.4 状態の処理に適した API

  • 状態アクションまたは状態遷移
  • コンビネータとは、後ほど定義する高階関数

  • 6.4.1 状態アクションの結合

  • 6.4.2 入れ子の状態アクション

6.5 状態アクションデータ型の一般化

  • 状態アクションを処理するための汎用目的の関数であり、状態の型を特別扱いしません
  • 状態を扱う計算、あるいは状態アクション、状態遷移、さらにはステートメントの省略形

6.6 純粋関数型の命令型プログラミング

  • 命令型プログラミングのパラダイムでは、プログラムとはずらりと並んだステートメントのこと であり、ステートメントはそれぞれプログラムの状態を変化させる可能性
  • 関数型プログラミングが副作用のないプログラミングにすぎない

6.7 まとめ

  • 考え方は単純で、引数として状態を受け取る純粋関数を使用し、結果とともに新しい状態を返します