Data.List モジュールの Infinite lists セクションの関数は、いずれも、無限リストを発生させるための関数だ。どれも仕組みが単純なので使い方には迷わないだろう。
iterate は、第1引数の関数を、第2引数の初期値に繰り返し適用した結果の無限リストを生成する。無限リストなので take 関数で先頭部分をとり出さなければならない。 Prelude> take 10 $ iterate (*2) 1 [1,2,4,8,16,32,64,128,256,512] repeat 関数は、第1引数の値だけを要素とする無限リストを作り出す。 Prelude> take 10 $ repeat 2 [2,2,2,2,2,2,2,2,2,2] replicate 関数は、第1引数の長さだけ、第2引数の値だけを要素とするリストを作り出す。 Prelude> replicate 10 2 [2,2,2,2,2,2,2,2,2,2] cycle 関数は、引数にリストをとり、そのリストを繰り返し出力する無限リストを作り出す。 Prelude> take 10 $ cycle [1,2,3] [1,2,3,1,2,3,1,2,3,1] これらの関数は規則性を持った数列を作るときに便利だ。たとえば、2進数のビット数とそれで表現できる整数の数を対応させたペアを作るときは次のようにする。 Prelude> zip [1..10] (iterate (*2) 2) [(1,2),(2,4),(3,8),(4,16),(5,32),(6,64),(7,128),(8,256),(9,512),(10,1024)] for ループで作るのと違って簡単に作れてしまう。 このように Data.List モジュールの関数を使い慣れると、手続き型のプログラム言語でループを使って記述していた繰り返しの操作を、リスト操作の関数で簡潔に記述することができる。
by tnomura9
| 2011-09-03 11:03
| Haskell
|
Comments(0)
|
カテゴリ
新型コロナウイルス 主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude Ocaml ボーカロイド 圏論 jQuery デモ HTML Python ツールボックス XAMPP Ruby ubuntu WordPress 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker ed と sed HTML Raspberry Pi C 言語 命題論理 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||