Erlang をはじめよう その1
本ブログ初のErlangエントリ。
Introducing Erlang - O'Reilly Media を読みながら、実行したコマンドを自身の復習のために書き連ねていく。
どのような結果になるか、考えながら手を動かしていくスタイル。
尚、以下に記載している内容は、書籍のサンプルコードとは異なります。
- 凡例
$ ===> OS のシェルプロンプト > ===> Erlang Shell で実行 % ===> インラインコメント
CHAPTER 1: Getting Comfortable
Erlang Shell での基本的な操作。
起動と終了
erl コマンドを実行し、Erlang Shell を起動する。 (Windows の場合は werl コマンド)
$ erl > % Ctrl+G を押下 User switch command --> ? --> q > % Ctrl+C を押下 BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded (v)ersion (k)ill (D)b-tables (d)istribution a > q(). > init:stop().
ディレクトリとヒストリの操作
Erlang Shell 組み込みコマンド。
1> help(). 2> pwd(). 3> ls(). 4> h(). 5> v(2). 6> results(3). 7> h(). 8> v(2). % エラー 8> v(-1). 9> e(2). 10> history(3). 11> h(). 12> e(2). % エラー 12> e(-1). 13> cd(..). % エラー 13> cd(".."). 14> cd("/tmp"). 15> pwd().
数値の操作
どの処理でエラーが発生するか?
> 1+2. > 10 - 100. > 1+3.0. > 100 * 10. > 10.0 * 0. > 100/33. > 100 div 33. > 100 rem 33. > 100/0. > -100.0/0.0. > 0.0/0.0. > 100 div -33. > -100 div 33. > 100 rem -33. > -100 rem 33. > -100 rem -33. > 5 - 4 * (3 + 2). > round(100/22). > math:sin(math:pi()/2). > math:sin(math:pi()). > math:cos(0). > math:pow(2, 10). > math:pow(10, 333). > 2#1111. > -16#f0f0. > 16#fffffffffffffffff. > 36#a3Z. > bnot 10. > bnot -1. > 5 band 15. > -1 band -2. > 5 bor 11. > 5 bxor 11. > 11 bsl 2. > 11 bsr 2. > 1 bsr 10. > -1 bsr 10. > 1 bsl 1000.
変数の操作
どの操作でエラーが発生するか?
> n=10. > N=10. > N=11. > 10=N. > 11=N. > 25 = N * 2 + N div 2. > N * 2 + N div 2 = 25. > M=N+1. > M=N+1. > N+1=M. > 11=M. > M=11. > b(). > f(M). > b(). > M=N*3. > N=11. > f(). > N=M. > N=11.
CHAPTER 2: Functions and Modules
引き続き Erlang Shell で実行。
関数の定義
今日はクリスマス。というわけで、ケーキの代金を求める Price 関数を作る。
ドル払い(端数は四捨五入)もできるようにしますよ。
> Price = fun(Num) -> trunc(348 * Num * 1.05) end. > Yen_to_dollar = fun(Yen) -> round(Yen / 104.288) end. > b(). > Price(3). > Yen_to_dollar(Price(4)). > Num. > Yen. > Price1 = Fun(Num) -> trunc(348 * Num * 1.05) end. > price2 = fun(Num) -> trunc(348 * Num * 1.05) end. > Price3 = fun(num) -> trunc(348 * num * 1.05) end. > Price3(10).
モジュールの定義
ファイル(仮に prices.erl とする)に以下の内容を保存。
-module(prices). -export([price/1, yen_to_dollar/1]). price(Num) -> trunc(348 * Num * 1.05). yen_to_dollar(Yen) -> round(Yen / 104.288).
Erlang Shell から、そのモジュールを利用できる。
> ls(). > prices:price(3). > c(prices). > ls(). % どのような拡張子のファイルが生成されるか? > prices:price(3). > prices:yen_to_dollar(10000).
ドキュメント(EDoc)の生成
ファイル(prices.erl)の内容を更新。
%% @author mogproject [http://mogproject.blogspot.com] %% @doc Functions calculating price of cakes. %% @reference REFERENCE HERE %% @copyright 2013 by mogproject %% @version 0.1 -module(prices). -export([price/1, yen_to_dollar/1]). %% @doc Calculates price of cakes. %% You should specify how many cakes you want. -spec(price(integer()) -> integer()). price(Num) -> trunc(348 * Num * 1.05). %% @doc Exchange yen to dollar. -spec(yen_to_dollar(integer()) -> integer()). yen_to_dollar(Yen) -> round(Yen / 104.288).
Erlang Shell で以下のコマンドを実行。
> edoc:files(["prices.erl"], [{dir, "doc"}]).
doc サブディレクトリ配下に各種HTMLファイルが作られるので、その内容をブラウザで確認しよう。
0 件のコメント:
コメントを投稿