2012年3月20日火曜日

チューリング 不動点演算子 証明

チューリングの不動演算子についての証明を画像に示す。
texでドキュメントをおこそうとしたけど、半年前からまったく触ってなかったので、ドキュメント作成が大変だった(まだできていない)。
現時点では、画像をアップロード。

問題

証明

私のダイエット方法:朝ジョギングダイエット

朝ジョギングダイエット:
https://docs.google.com/open?id=0B8Fi1kuQJgFreGRBV1Jaa25Tei1Ud01hd1ZhbHVXdw

朝食を食べずにジョギングをすることでダイエットする方法を、簡単に書いてあります。
(ジョギング後は朝食食べてOKです。)
ダイエットの1つの方法として、参考にしてください。

2012年3月4日日曜日

Erlang crypto rand_uniform サンプル

タイトル通り crypto:rand_uniform のサンプルを。

1番苦労したのは、モジュールのロードでした。

普通にやっていたら、「定義されていない関数だ」みたいなエラーがでました。

そこを踏まえ、サンプルの提示です。

◆モジュールのロード

ソースのコンパイル時にオプションを付ける。

使用したいモジュールが使えるようになる。

今回はcryptoモジュールなので、そのbeamがある場所を-pzのあとに指定する。

$> erlc -pz C:/erl5.9/lib/crypto-2.1/ebin test_crypto_uniform.erl

あとは、コンパイルしたモジュールを実行する。

$> erl -noshell -run test_crypto_uniform start -run init stop

◆ソース

-module(test_crypto_uniform).
-compile([export_all]).
%-import( crypto, [ rand_uniform/2 ] ).

start() ->
    Rand = crypto:rand_uniform(100, 10000),
    io:format( "rand:~p~n", [Rand] ),
    timer:sleep( Rand ).

Erlang ロード モジュール 検索パス 設定

Erlangのリファレンスには、ちゃんとモジュールがあるが、実際に動かそうとすると、そんなモジュールないよと怒られる。

そんなときにはどうするか。
モジュールをロードしよう。

◆Erlangシェルの場合
.(ピリオド)erlangに設定する


Erlangシェルを起動したときの表示から、モジュールがロードされていることがわかる(?)


◆コマンド実行におけるロード
erlcコマンドのオプションで -pz PATH または -pa PATH をつける


(上記画像はMakefileに記述している。)

2012年3月3日土曜日

Erlang プロセス 生成 サンプル

Rubyの勉強をしている。

そのとき、スレッドを並行実行するサンプルを丸写しした。

そのサンプルをErlang版として記述した。

以下にそれをコピペしておく。

◆並行実行動作

1.2つのプロセスが生成される。
2.それぞれのプロセスはある時間(秒)スリープして、時間経過後、ある文字を標準出力する。
3.7秒後メインプロセスが終了する(生成したプロセスも終了する)。

◆ソース

-module(test_thread_start).
-compile(export_all).

%% 標準出力
log_print( Start_time, String ) ->
    { _, Now, _ } = erlang:now(),
    Time = Now - Start_time,
    io:format( "~ps: ~s~n", [ Time, String ] ).

%% プロセス生成
loop_thread( Start_time, Sec, Str ) ->
    spawn( test_thread_start, thread, [ Start_time, Sec, Str ] ).

%% 生成したプロセスの動作
thread( Start_time, Wait_time, String ) ->
    timer:sleep( Wait_time ),
    log_print( Start_time, String ),
    thread( Start_time, Wait_time, String ).

start() ->
    { _, Start_time, _ } = erlang:now(),
    log_print( Start_time, "Start" ),

    loop_thread( Start_time, 2000, "a" ),
    loop_thread( Start_time, 3000, "b" ),

    timer:sleep( 7000 ),
    log_print( Start_time, "End" ).

◆実行結果