関数型言語を触ってみる(その7)

  • 5章 リストとタプルを使う
    • BIFは組み込み関数のこと
    • listsモジュールのsubtract(List1, List2)、リストから別のリスト要素を減ずる(便利かも。pythonでは何?
    • Erlang関数型言語です。Erlangを学ぶからには自分で関数を作成できなければなりません(!)
    • 束縛変数の値は変更できないため、カウンタを使ったループ処理ができない(困った...)
    • 関数の再帰呼び出しを行う際の戻り値、または引数を利用し、それらの更新値をリレーする(むーん)
    • いまから作成する関数とlistsモジュールの関数の名前は同じですが、モジュールが異なるのでこれらは異なる関数です(名前が同じでもいいんだ)
    • 再帰関数の引数を利用して何かの値を求めることができる(逆に言うとそれでしかできないのでは。要素数のカウントとか)
    • [_|T]では、Tが現在のリストの第2要素以下を表している(Tの意味を確認した。忘れてた)
    • 再帰を終了するために、リストが空になれば最大値を返すクローズが必要。max([], M) -> M.
    • 最大値の初期化。max([H|T]) -> max(T, H).(うーん)
    • リスト5-2に、この方法で作成したmin()関数とmax()関数を示す(このモジュールの書き方にはいろんな意味で抵抗がある)

ローテートは練習問題として、自分で考えてみる。
リバースの前まできた。

p.124 リバースから

    • リスト内包表記と呼ばれるプログラミング技法が使える(ほー)
    • リスト内包表記の一般構文 [コンストラクタ||パターン <- リスト、条件](コンストラクタ?)
    • Even=[X || X <- L1, X rem 2 =:= 0]. リストL1から要素Xをマッチさせ、要素Xが偶数ならば、新たに要素Xを生成する、という記述(今までの中で、リスト内包表記が一番親しめる。他が今までの常識とあまりにもかけ離れているから...)
    • タプルのリストを用いたリストの内包表記では、キーと値のペアを保持できるタプルの特性を生かした”キーによるリスト要素アクセスが”が可能となる(ほー)
    • リスト演算子でリストの連結、削除ができる(ほー、便利だ)
    • リスト内包表記の簡潔さを示す典型がクイックソートです(ふーん)
  • 6章 並列プログラミング
    • 言語が独自にプロセスと呼ばれる処理機構を提供することで、並列処理をシンプルな形で実現することが可能になっている(ほー)
    • spawn関数は引数に指定した関数を独立したプロセスで実行する(forkのようなもの?)
    • プロセスは他のプロセスから完全に独立した存在で、メモリを共有しない(!)
    • spawn関数により作成されたプロセスは、その関数の実行が終わると自動的に終了します
    • spawn関数の戻り値はプロセス識別子
    • プロセス識別子を使うことで、そのプロセスにメッセージを送信できる。send演算子(!演算子)を使う