忍者ブログ
Since 14.Jan.2009:08:29 プログラミングと絵のブログ
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


Erlangではfor文が使えないようです(!

よって別に関数を作って再帰処理します
まぁ不便というよりは
ループの中身は別関数に分けるのが元々推奨されてるし

再帰処理のベタなプログラムといえば
階乗と相場が決まっているのでErlangで階乗のプログラム

-module(factorial).
-export([start/1]).

start(N) when is_integer(N) ->
  factorial(N, 1).

factorial(0, Res) ->
  Res;
factorial(N, Res) ->
  factorial(N-1, Res*N).

以上

最初の2行は前の記事を見てもらうとして
4行目のwhen is_integer(N)は前に言ったガードというもの

これに一致したときだけ処理をする
is_integer(N)はもちろん整数かどうかの判定です

1つ目のfactorialは0になったらResを返す

2つ目のfactorialはNを1ずつ減らして
Resに今のNを掛けていく関数

いちいち引数に前のループの結果を渡しているのは、
前の結果を保持する必要がなくするため

Erlangでは末尾再帰
(再帰に処理を渡した後、渡す側の関数でもう処理がない再帰)
にすれば、渡す側の関数は破棄されるので
引数に渡しておけば前の分のメモリ保持が必要ないから
必要最低限のメモリで再帰処理ができるらしいよ

まぁループないといってもmapとかforeachとかで
Listは簡単に処理できるからほとんど
ループなんて使わなくても処理できるけどね
PR

Comment
Name
Title
Mail
URL
Comment
Pass   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
[41] [40] [39] [38] [37] [36] [35] [34] [33] [32] [31
«  Back :   HOME   : Next  »
カレンダー
04 2024/05 06
S M T W T F S
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
ブログ内検索
プロフィール
HN:
uguisu_an
年齢:
34
性別:
男性
誕生日:
1989/08/20
自己紹介:
基本的にテキトー
最新コメント
[10/01 くゆる]
[09/21 uguisu_an]
[09/17 mayigo]
[07/17 uguisu_an]
[07/15 shinh]
最新トラックバック
アクセス解析
フリーエリア
P R
忍者ブログ [PR]