[メモ] Eralng Course: Module 2 - Sequential Programming (中編)

もくじ

関数呼出(Function Calls)
  関数名はアトムのルールに沿っている必要がある
  コロン区切りでモジュール名を前置。
  引数にはErlangのあらゆるデータ構造が入る。
     module:func(Arg1, Arg2, ... Argn)
     func(Arg1, Arg2, .. Argn)

   引数の数が異なる関数は別の関数として扱われる(Prolog的)。
   なので関数を文書に表記するときは、
   somefunc/3 などと "/"のあとに引数の数をつけて示す。

関数記法 ( Function Syntax )
  まだ条件があるときは ";" 、最後の条件は "." で終端する。
  評価は上から順に行われる(バックトラックしない)。
  ボディ部も前から順に呼び出される。
    func(Pattern1, Pattern2, ...) ->
        ... ;
    func(Pattern1, Pattern2, ...) ->
        ... ;
        ...
    func(Pattern1, Pattern2, ...) ->
        ... .
  ※引数の数が違う同名の定義は、別関数と認識される。

ガードされた関数 (Guarded Function Clauses)
 whenを使って関数に条件式をつけられる(ガード)
 変数は全て束縛済み(代入済み)である必要がある
  factorial(0) -> 1;
  factorial(N) when N > 0 ->
    N * factorial(N - 1).
 完全にガードすると、関数定義は順番に依存しなくなる
  factorial(N) when N > 0 ->
    N * factorial(N - 1);
  factorial(0) -> 1.
  ※上は、第1の例と同じ意味で、下の例とは違う。
  factorial(N) ->
    N * factorial(N - 1);
  factorial(0) -> 1.
 
モジュール システム(Module System)
  -moduleでモジュール名定義。
  -exportで関数公開。
    -module(demo).
    -export([double/1]).
    double(X) ->
        times(X, 2).
    times(X, N) ->
        X * N.
    ※この場合、double/1 はモジュール外から
      アクセスできるが、times/2 はだめ

ビルトイン関数 (Built In Functions / BIFs)
  処理系に入っている関数。詳細はマニュアル嫁。
    date()
    time()
    length([1,2,3,4,5])
    size({a,b,c})
    atom_to_list(an_atom)
    list_to_tuple([1,2,3,4])
    integer_to_list(2234)
    tuple_to_list({})

ガードの例 (Examples of Guards)
  number(X) - Xは数字(Number
  integer(X) - Xは整数
  float(X)   - Xは浮動小数点数
  atom(X)   - Xはアトム
  tuple(X)   - Xはタプル
  list(X)    - Xはリスト
  length(X) == 3  - リストXの要素数は3
  size(X) == 2 - タプルXのサイズは2
  X > Y + Z  - X > Y + Z
  X == Y  - X は Y と等しい
  X =:= Y  - X は Y と厳密に等しい
  ※ 1 == 1.0 は成功、 1=:=1.0 は失敗

- - -

 もくじ

Eralng Course: Module 2 - Sequential Programming
http://www.erlang.org/course/sequential_programming.html

トラックバック(0)

このブログ記事を参照しているブログ一覧: [メモ] Eralng Course: Module 2 - Sequential Programming (中編)

このブログ記事に対するトラックバックURL: http://do-gugan.com/cgi-bin/mt/mt-tb.cgi/1996

コメントする

2008年8月

          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

アーカイブ