より複合的な例とは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > より複合的な例の意味・解説 

より複合的な例

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/11/20 02:06 UTC 版)

Haskell」の記事における「より複合的な例」の解説

引数 f を伴う高階関数表現され単純な逆ポーランド記法評価器が、パターンマッチング型クラス Read用いた where 節で定義されている。 calc :: String -> [Float] calc = foldl f [] . words where f (x:y:zs) "+" = y+x:zs f (x:y:zs) "-" = y-x:zs f (x:y:zs) "*" = y*x:zs f (x:y:zs) "/" = y/x:zs f xs y = read y : xs 空リスト初期状態とし、f を使って一語ずつ文字列解釈していく。f は、注目している語が演算子ならばその演算実行しそれ以外ならば浮動小数点として計算スタック積んでいる。 次はフィボナッチ数列リストである。ある値nに対すfib(n)一回しか計算しないようになっており、その点ではナイーブなフィボナッチ異な効率良いコードとなっている。 fibs = 0 : 1 : zipWith (+) fibs (tail fibs) 無限リストは 余再帰リスト後ろの値は要求があったときに 0 と 1 の二つ初期要素から開始され算出される)によって実現されるこのような定義は遅延評価実例で、Haskell プログラミングでも重要な部分である。 ただし、フィボナッチ数列生成場合は、ある要素の値が必要であれば、その要素より前にある要素の値は全て必要である。従って、遅延させた上で結局は後から全てその値を求めることになり、むしろ無駄であるので、この場合遅延させない組込関数seq使用したほうが効率良くなり、fib 1000000 といったような値を計算するような場合には差が見えてくる。あるいはリスト先に出る値から順番計算させるとそのほう速い、といったことが起きる。(さらに、フィボナッチ数はnに対して2nと大きな値になるので、そのようなBigIntegerの加算コスト掛かり以前にこの場所に書かれていたような線形時間でのフィボナッチ数列生成」は、大きい値では不可能である) どのように評価進行するかの例示のために、次は6つ要素計算の後の fibstail fibs の値と、どのようにzipWith (+) が4つの要素生成し次の値を生成し続けるかを図示したのであるfibs = 0 : 1 : 1 : 2 : 3 : 5 : ... + + + + + + tail fibs = 1 : 1 : 2 : 3 : 5 : ... = = = = = = zipWith ... = 1 : 2 : 3 : 5 : 8 : ... fibs = 0 : 1 : 1 : 2 : 3 : 5 : 8 : ... 次はGHC使える言語拡張で、リスト内包表記並列的生成記述できるよう拡張するParallelListCompを用いて書いた同様の式である。(GHC拡張特別なコマンドラインフラグ、またはLANGUAGEプラグマによって有効になければならない詳しくGHCマニュアル参照のこと) {-# LANGUAGE ParallelListComp #-} fibs = 0 : 1 : [ a+b | a <- fibs | b <- tail fibs ] 先に見た階乗の定義は、次のように関数の列を内包表記生成して書く事もできる。 fac n = foldl (.) id [(*k) | k <- [1..n]] 1 特に簡潔に書ける例として、ハミング数が順番に並ぶリスト返す以下のような関数がある。 hamming = 1 : map (*2) hamming # map (*3) hamming # map (*5) hamming where xxs@(x:xs) # yys@(y:ys) | x==y = x : xs # ys | xy = y : xxs # ys 上に示されさまざまな fibs の定義のように、これはオンデマンドに数のリスト実現するために無限リスト使っており、1 という先頭要素から後続要素生成している。 ここでは、後続要素構築関数は where 節内の記号 # で表現され中置演算子定義されている。 各|は、等号前半条件部分と、後半の定義部からなるガード節を構成する

※この「より複合的な例」の解説は、「Haskell」の解説の一部です。
「より複合的な例」を含む「Haskell」の記事については、「Haskell」の概要を参照ください。

ウィキペディア小見出し辞書の「より複合的な例」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「より複合的な例」の関連用語

1
4% |||||

より複合的な例のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



より複合的な例のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのHaskell (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2024 GRAS Group, Inc.RSS