12.25.2013

Getting Started with Erlang pt.1

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ファイルが作られるので、その内容をブラウザで確認しよう。

Screenshot 12 25 13 03 16

0 件のコメント:

コメントを投稿