タグ

ブックマーク / www.itpl.co.jp (4)

  • ivarの必要性 - ocaml-nagoya

    OCamlではCMLスタイルのスレッド間通信が可能です。 Eventモジュールには基的なイベント型やその同期関数が揃っています。 ところが、ivarやmvarといった共有変数が無い為に苦しい状況になっています。 例えばとても単純に、整数を渡して計算結果を(今回は倍にして)返してくれるスレッドを作ってみましょう。 すぐに思いつくのは、次のようなコードです。 let start_server () = let in_ch, out_ch = new_channel (), new_channel () in let rec loop () = let x = sync (receive in_ch) in loop (sync (send out_ch (x * 2))) in ignore (Thread.create loop ()); in_ch, out_ch let calc (i

    mzp
    mzp 2008/10/11
    ivar = 一度しか書き込めない変数。代入する前にも使える
  • OCamlテクニック/monad - ocaml-nagoya

    OCamlテクニック/monad OCamlでモナドを楽しむ † HaskellのMaybeモナドとかListモナドによるバックトラックとかは大変有用。 でも欲張ってモナドそのものをOCamlに導入しようとすると、色々と複雑になってくる。 そこで、camlp4を使ったモナド拡張を利用して、シンプルにモナドを楽しんでみる。 monad拡張のページ 例によって有名人が作っている。 exceptionモナドとかイケてる。 ↑ まずは環境作り † monad拡張をダウンロードしてきたら、おもむろにmake。その後、 $ocaml -I +camlp4 Objective Caml version 3.09.3 #load "camlp4o.cma";; Camlp4 Parsing version 3.09.3 #load "pa_monad.cmo";; として準備OK ↑ Maybeモナド †

  • Thrift - ocaml-nagoya

    クライアントを書く † Hello_client.mlを新規作成して内容はこうする。 open Thrift;; open Hello_types;; let s = new TSocket.t "localhost" 9090;; let p = new TBinaryProtocol.t s;; let c = new Hello.client p p;; s#opn; print_string (c#hello "Gemma"); print_char '\n'; s#close; ↑ クライアントをコンパイルする † Makefileを使うべし。 SOURCES = ./gen-ocaml/hello_types.ml ./gen-ocaml/hello_consts.ml ./gen-ocaml/Hello.ml Hello_client.ml RESULT = test_cli

    mzp
    mzp 2008/09/25
    いつのまにっ
  • 有限会社ITプランニング(IT Planning Inc.)

    Copyright (C) 2006-2007 IT Planning Inc. All Rights Reserved.

  • 1