Ruby の配列操作メソッドに shift がある。これは配列の先頭の要素を取り出すが同時に元の配列からその要素は取り去られる。これを使うとRuby でもHaskell の (x:xs) のようなパターンプログラミングができるのではないかと考えた。下の例の square(x) は引数を2乗する関数だが、mymap(x) は配列を引数にとり、それぞれの要素にsquare(x) を適用した配列を返す。
irb(main):001:0> def square(x) irb(main):002:1> x * x irb(main):003:1> end => nil irb(main):004:0> def mymap(x) irb(main):005:1> if x == [] irb(main):006:2> [] irb(main):007:2> else irb(main):008:2* [square(x.shift)] + mymap(x) irb(main):009:2> end irb(main):010:1> end => nil irb(main):011:0> mymap([1,2,3]) => [1, 4, 9] Ruby にはmapメソッドがあるからいらない工夫だが、適用する関数に普通の関数を使うことができる。 今日の Haskell foldr の簡単な理解の仕方はリストの (:) 演算子を引数の演算子で置き換えると良いらしい。 foldr (+) 0 [1,2,3] == (1 + (2 + (3 + 0))) -- [1,2,3] == (1 : (2 : (3 : []))) の : を + に置き換え。単なる記憶法でなく理論的にもそうらしい。 だんだんネタ切れになってきた。そろそろ沈黙して勉強する時期かも。
by tnomura9
| 2010-11-23 21:33
| Haskell
|
Comments(0)
|
カテゴリ
新型コロナウイルス 主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude Ocaml ボーカロイド 圏論 jQuery デモ HTML Python ツールボックス XAMPP Ruby ubuntu WordPress 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker ed と sed HTML Raspberry Pi C 言語 命題論理 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||