2007-05-09 Wed

桃太楼の栗まん

桃太楼の栗まんをいただいた。

画像画像

へぇ、長野土産かー。真空パックでいい感じですよ。

画像

ガブっと食べてみると、中は大きな栗が入っています。最高。

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

何事も始めるときは早く少しでも

Erlangを始めてみて改めて思うのは、
何事もHello World的なところに思った瞬間にたどりつくのは重要。

サンプルコピーしようが、人の計算機使おうが、
レンタルでも、拾いものでも、通りすがりでも何でも良い。

ちょっとやって、ちょっと成果を得る。しかも超早く。
その後、基礎からコツコツとやる。
その際も近い結果を何やってもいいからちょっと早く出して基礎から詰める。
んー、何年生きて当たり前のことに気が付いてるんだろう。
10年前に気がついていなきゃいけないことだ。

あんまり浮気してばかりではよくなさそうですが、
今頭に浮かんでいるやってみたいことは全部やった方が良いかもなー。

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

Debian EtchでErlang (アーラン) をはじめてみた

Erlang (アーラン)が流行っているみたいなので、
はじめてみることにしました。

作業履歴のまとめは以下のリンクに掲載しました。
[O] これから15分でErlangを始めるための資料

さて、まずはErlangの意味を調べてみようと思います。

Erlangとは - totowa トトワ

エリクソン社により次の条件のシステムを構築できるよう設計された。
並列処理に適したプログラミング言語で、1987年に登場し、1998年に
はオープンソース化されているので新しく登場した言語というわけではな
いが、時流に乗る形で、現在にわかに注目を集め始めている。
1987 年頃、スウェーデンの電話会社である Ericsson で開発された
関数型言語です。
並列処理が得意なので,それに関しては他の言語より圧倒的に速いのは
確認したけれど, わたしがよく使う通常の処理に関してもどの程度違うの
か測定してみた。


以下に、ぐだぐだと記録することにします。

はじめに、コンパイラをなんとかしないといけないので、
ともかくerlang.orgにいくことにした。
Erlang

erlang.orgで、最初に教科書っぽいpdfを見つけた。やったね。

Concurrent Programming in Erlang, Part I (pdf 884 KB)
The first part of the Erlang Reference book (by permission of Prentice Hall).

いろいろ調べると、Debianはapt-getでerlangをインストールできるみたい。
apt-get install erlang


インストール完了。

Erlang Land
Rubyist Magazine - Rubyist のための他言語探訪 【第 10 回】 Erlang
を眺めながら、とりあえずsample.erlを書いてみることにする。
Emacsを起動したらErlang modeになった。嬉しい。


Hello world - Wikipedia "Erlangでの例
-module(sample).
-export([hello_world/0]).

hello_world() -> io:fwrite("Hello, World!\n").


上記のようなsample.erlを書いたあと、erlを立ち上げてコンパイル。

%erl

Eshell V5.5.2  (abort with ^G)
1> c(sample).
{ok,sample}
2> sample:hello_world().
Hello, World!
ok
3>


おお、できたできた。なんか半分満足。
次はフィボナッチ変数でもやってみようかな。

Rubyist Magazine - Rubyist のための他言語探訪 【第 10 回】 Erlang
を読んで、ついでにいろいろなことを理解することにした。

- Erlang の変数はすべて大文字またはアンダースコア (_) で始まる
- Erlang の変数は一度だけ代入可能。複数回ダメ。ループは再帰か高階関数
- 型の解決は動的。
- Erlang は関数型言語。状態がない (副作用がない)とか。



- module名は小文字始まり。よってファイル名は小文字。
- あ、型がないからオーバーロードできない。
- exportは関数名/引数の数を、関数の数だけ配列に突っ込む。
- module,export,recordは先頭に-が付く。
- elseがない。そのため、if文は式の連続、else代わりのtrue、
  引数などの条件をしぼるwhenを使う。
- if文は実行された式があったら終了

fact.erl
-module(fact).
-export([fac/1]).

fac(0) -> 1;
fac(N) when N > 0 -> N * fac(N-1).


実行してみた。

%erl
[/home/satou/.../Erlang/bin#]
Erlang (BEAM) emulator version 5.5.2 [source] [async-threads:0]
[kernel-poll:false]

Eshell V5.5.2 (abort with ^G)
1> c(fact).
{ok,fact}
2> fact:fac(5).
120
3> fact:fac(4).
24
4> fact:fac(3).
6
5> fact:fac(2).
2
6> fact:fac(1).
1


- trueとfalseがある。勝手に型を推定してくれるっぽ。
- ifは
if
  式1;
  式2;
  式3
end.

- caseは
case X of
    1 -> "hoge";
    2 -> "fuga";
    3 -> "foobar";
    _ -> "piyo"
  end.


- Erlangのスレッドは共有される状態がないので、プロセスといえる。
- よってErlangではスレッドをプロセスと呼ぶ。
- Erlangのプロセスは超軽量。
- Erlangのプロセスがプロセス間で共有するものを持たないということは、
  Erlangのプロセスは単一OSプロセスにしばられず、存在できる。
- Erlangのプロセスはプロセス間通信をメッセージで行う
- メッセージの送出は「!」、メッセージの受信は「receive」。
- mathモジュールってのがある
- 変数 = 値.、と書くと代入できる

[root@]#erl
[/home/satou/.../Erlang/bin#]
Erlang (BEAM) emulator version 5.5.2 [source] [async-threads:0]
[kernel-poll:false]

Eshell V5.5.2 (abort with ^G)
1> X=10.
10
2> X=10.
10
3> X=20.

=ERROR REPORT== 9-May-2007::20:09:35 =
Error in process <0.30.0> with exit value:
{{badmatch,20},[{erl_eval,expr,3}]}

exited: {{badmatch,20},[{erl_eval,expr,3}]} **


4> X>10.
false
5> X==10.
true


ふむ、なるほど。

今日は眠くなったのでまた明日やろうかな。

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |