Ruby で1からnまでの数列の和を求める関数を書いてみよう。
$ irb irb(main):001:0> def sum_l(n, total = 0) irb(main):002:1> for i in 1..n irb(main):003:2> total += i irb(main):004:2> end irb(main):005:1> total irb(main):006:1> end => nil irb(main):007:0> sum_l(10) => 55 これを再帰関数で記述するとこうなる。 irb(main):008:0> def sum_r(n) rb(main):009:1> if n == 1 then 1 irb(main):010:2> else n + sum_r(n-1) end irb(main):011:1> end => nil irb(main):012:0> sum_r(10) => 55 インタープリタの内部で何が起きているかを問題にしないなら、sum_l(n) も sum_r(n) も同じように、引数10 をとると戻り値 55 を返してくる。なにも再帰関数による定義はHaskell 固有のものではなく、 Ruby でも同じように記述できる。 Haskell の再帰関数によるループの記述が奇異に見えたとしても、Haskell の問題ではなく、単に自分たちが再帰関数による繰り返しの定義に慣れていないということを意味しているにすぎない。 Haskell を使うのに抵抗を感じなくなるコツは、上のように繰り返しを再帰関数で記述するとどうなるかということを、繰り返し考えることだ。 今日のHaskell module Face where data Face = Face instance Show Face where show x = "(~~);" 実行例 Hugs> :l face.hs Face> print a where a = Face (~~); instance の使い方の例。決まりごとが多いので説明が難しいが、自分で定義したデータ型を表示する時の様子をプログラムする方法。 ■
[PR]
by tnomura9
| 2010-11-25 08:27
| Haskell
|
Comments(0)
|
カテゴリ
主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude 圏論 ボーカロイド jQuery デモ Python ツールボックス XAMPP Ruby ubuntu 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||
外部サイトRSS追加 |
||