タグ

Haskellとlistに関するnsyeeのブックマーク (9)

  • dlist

    Difference Lists List-like types supporting O(1) append and snoc operations. Installation dlist is a Haskell package available from Hackage. It can be installed with cabal or stack. See the change log for the changes in each version. Usage Here is an example of “flattening” a Tree into a list of the elements in its Leaf constructors: import qualified Data.DList as DList data Tree a = Leaf a | Bran

  • null instead of ==

  • guard の動作原理を考える - あどけない話

    「リストモナドの動作原理を考える」の続きで、guard の動作原理を考えてみます。 guard は、リスト内包表記では、こんな感じに書けます。 [x | x <- [1,2], x < 2] → [1] これを do で書き直すと、こうなります。 do x <- [1,2] guard (x < 2) return x guard の定義は、Contorol.Monad の中にあって、こういう風になっています。 guard :: (MonadPlus m) => Bool -> m () guard True = return () guard False = mzero 僕には return () が何を意味するのか、さっぱり分かりませんでした。 do から >>= へ変形 上記の do を >>= へ変形するとこうなります。 [1,2] >>= (\x -> guard (x < 2)

    guard の動作原理を考える - あどけない話
  • 非決定計算としてのリストモナド - 純粋関数空間

    最近のHaskell 最近はHaskellに関するブログ記事をちらほら見かけるようになって来ました。 日々のスクリプトに使おうとしようという人もいるようで、 http://d.hatena.ne.jp/aya_eiya/20120221/1329836207 このようなブログ記事を見かけました。 Haskellで書いたらそんなに汚いコードにはならないというのはたしかにあります。 やってはならないということがHaskellには比較的少ないのだと思います。 というのも、Haskellでは、やってはいけないことがそもそもできないようになっているか、 やることが極めて難しくなっている(unsafeプリフィックスを持つ関数を駆使したりなど) ことが多いのです。 しかし、そんなHaskellのプログラムも、少し工夫すればもっと良くなることもあります。 列挙問題 先ほどのブログの記事の1つ目のプログラム

  • Haskellのリスト定義の謎 - あどけない話

    ghci を起動し、":info []" とタイプすれば、リストの定義が表示されます。 > :info [] data [] a = [] | a : [a] これが何を意味しているのか、僕は長い間分かりませんでした。同じように悩んでいる人もいるかもしれないので、説明してみます。 まず、第一の分かりにくい点は表記が揺れていることです。リスト型を意味する部分が、= の左側では "[] a"、右側では "[a]" となっています。これはどちらか一方に統一すべきでしょう。ここでは、"[] a" を選んでみます。 data [] a = [] | a : [] a ちなみに、型の部分に "[a]" と書くと、それは "[] a" の別表現になります。a は型変数です。値の部分に "[a]" と書くと、"a:[]" の構文糖衣です。a は単なる変数です。 第二の分かりにくい点は、データ構成子が二項演

    Haskellのリスト定義の謎 - あどけない話
  • (++) によるリスト連結時の再帰回数を数えてみる(右結合である理由)。 - sirocco の書いてもすぐに忘れるメモ

    (Real World Haskell—実戦で学ぶ関数型言語プログラミング 13.6 データとしての関数を利用する) Haskell においてリストを連結するための関数 ++ は下に示すように定義されています。xs ++ ys とした場合はリスト xs の長さに比例して再帰する回数が増加します。 (++) :: [a] -> [a] -> [a] (++) [] ys = ys (++) (x:xs) ys = x : xs ++ ys 以下に示したように a ++ b ++ c ++ d と連結すれば再帰するのは 30回ですが、 a = "0123456789" b = "0123456789" c = "0123456789" d = "0123456789" 以下のように連結を繰り返すと、再帰する回数は 60回になってしまいます。 ls1 = a ++ b ls2 = ls1 ++

    (++) によるリスト連結時の再帰回数を数えてみる(右結合である理由)。 - sirocco の書いてもすぐに忘れるメモ
  • listlike-instances

    Downloadslistlike-instances-0.2.3.1.tar.gz [browse] (Cabal source package)Package description (as included in the package) Maintainer's Corner Package maintainers JohnLato For package maintainers and hackage trustees edit package information Candidates No Candidates

  • 夜中からの Haskell 談義

    くいなちゃん @b2 C/C++ 並に高速な実行ファイルを吐き、C/C++ よりもコンパイルが速く、メモリ周りが安全で(バッファオーバーラン&メモリリークを防ぐ)、文法が美しいような実用的言語を設計中。 最終的には、ネイティブ実行ファイル生成可能なコンパイラまでを作るよ! 2011-04-11 03:31:08 Hideyuki Tanaka @tanakh 水をさすようですが、Haskellはこれらをすべて満たしていると思いますので、参考にされると良いかと RT @a_mute: C/C++ 並に高速な実行ファイルを吐き、C/C++ よりもコンパイルが速く、メモリ周りが安全で(バッファオーバーラン&メモリリークを防ぐ)、文法が美しい 2011-04-11 03:32:26 くいなちゃん @b2 Haskell は中身がどう動作しているのか解らないんですが、C/C++ 並に高速な実行ファイ

    夜中からの Haskell 談義
  • Haskell でリストに対する関数を考えるときの視点 - オブジェクト指向からの類推

  • 1