タグ

Haskellに関するhajimehoshiのブックマーク (206)

  • ArrowによるHaskellプログラミングの基礎。…パイプ感覚で順次/分岐/繰返し - よくわかりません

    Programming with Arrowsを読んで理解したつもりのメモ。誤りなど乞うご指摘。 (復習)Arrowってなに? と思って以前調べたメモが"3分で解るHaskellのArrowの基メモ - よくわかりません"。それにちょっと補足というか観点を変えてまず感覚の整理。 Monadに色んな種類があるように、Arrowも色んな種類がある。 Monad: IO、Maybe、… Arrow: 関数そのまんま(->)、Kleisli m、… ある種類のMonadに色んな型の色んな値を入れられるように、ある種類のArrowに色んな型の色んな関数を入れられる。 Monad: Maybeの例→ 「Maybe Int」 にreturn 0もreturn 777もOK。「Maybe Char」 にreturn 'a'もreturn ' 'もOK。 Arrow: (->)の例→ 「Int -> In

    ArrowによるHaskellプログラミングの基礎。…パイプ感覚で順次/分岐/繰返し - よくわかりません
  • Haskell/Understanding arrows - Wikibooks, open books for an open world

    We have permission to import material from the Haskell arrows page. See the talk page for details. Arrows, like monads, express computations that happen within a context. However, they are a more general abstraction than monads, and thus allow for contexts beyond what the Monad class makes possible. The essential difference between the abstractions can be summed up thus: Just as we think of a mona

  • Arrows: A General Interface to Computation

    Arrows are a new abstract view of computation, defined by John Hughes [Hug00]. They serve much the same purpose as monads -- providing a common structure for libraries -- but are more general. In particular they allow notions of computation that may be partially static (independent of the input) or may take multiple inputs. If your application works fine with monads, you might as well stick with t

  • Programming:玉手箱:整数論

    Programming:玉手箱 素因数分解既約分数拡張ユークリッドの互除法 素因数分解 ついでに、素因数分解 primes = map head $ iterate sieve [2..] sieve (p:xs) = [ x | x <- xs, x `mod` p /= 0] factors n = fc [] (prms n primes) n where prms n ps = takeWhile (ceiling (sqrt (fromInteger (n+1))) > ) ps fc rs [] n = reverse (n:rs) fc rs pps@(p:ps) n = case n `divMod` p of (1,0) -> reverse (n:rs) (m,0) -> fc (p:rs) (prms m pps) m _ -> fc rs ps n 篩で無駄な割り算

  • [Haskell] 素数列を生成するアルゴリズム×3 / LiosK-free Blog

    2008-09-10 カテゴリ: その他のプログラミング タグ: Haskell アルゴリズム 最近すっかりブログから離れていたので、リハビリがてらにメモ代わりのエントリー。 Haskellで素数の無限リストを生成する関数を3つほど作ったのでメモ。 primes1 = 2:f [3,5..] where f (x:xs) = x:f [y | y <- xs, mod y x /= 0] primes2 = 2:filter f [3,5..] where f n = all ((/= 0) . (mod n)) (takeWhile ((<= n) . (^ 2)) primes) primes3 = 2:f [3] [3,5..] where f (x:xs) ys = let (ps, qs) = span (< x^2) ys in ps ++ f (xs ++ ps) [z |

  • Haskell で素数 - ツムジのひとりごと

    "Project Euler" の問題には「素数」に関連したものが時々出てきます。そこで今回は、Haskell でどうやって素数列を扱っていけば良いかを考えてみます。 Haskell で有名なものに「エラトステネスの篩」があります。(以下のコードは最初から 2 以外の偶数を省いたものです) primes :: [Integer] primes = 2 : sieve [3, 5 ..] where sieve (p : xs) = p : sieve [x | x <- xs, rem x p /= 0] 「簡単なコードで素数の無限数列を扱える」ということで Haskell のコードとしては有名(?)なものですが、実は非常に遅いです。 このコードは、"ghc" で最適化のオプションを付けてコンパイルしても、「20万以下の素数の和」を求めるのに約 40 秒もかかってしまいます。(これ以降、時

    Haskell で素数 - ツムジのひとりごと
  • Euler problems - HaskellWiki

    These are solutions to the problems listed on Project Euler. WARNING - Do not peek at any of these pages if you want to enjoy the benefits of Project Euler, unless you have already solved the problems. The existence of these pages is very controversial; see the talk page for discussion. Many P.E. participants regard it as a global Internet competition which is being compromised by these readily av

  • モナディック・パーサー - あどけない話

    「ふつうのHaskellプログラミング」や 「構文解析結合子」の元ネタは、どうやら「Monadic parsing in Haskell」のようです。(さらに元ネタは Parsec ですかね。) このオリジナルは、MonadPlus の部分などが古くさいのですが、分りやすいです。というわけで、例題を Parsec 風にアレンジしつつ、勉強してみました。 四則演算式のパーサーを実現することを目標にします。 おまじない 最終的に以下のモジュールが必要になるので、import しておきます。 import Monad import Data.Char Parser の定義 Parser 型の定義はこうなります。 data Parser a = Parser (String -> [(a,String)]) 状態を表すために関数を使っている 関数を使うと状態が表現できることが分らない人は、先に「状

    モナディック・パーサー - あどけない話
  • Mighttpd

    Author: Kazu Yamamoto Created: 2010/03/08 Modified: 2017/02/24 Mighttpd2 (called mighty) is a simple but practical HTTP server written in Haskell. It handles static files and CGI scripts. It also provides a feature of reverse proxy and URL rewriting with HTTP redirect. Mighttpd2 is now implemented as a WAI application using the high-performance HTTP engine, "Warp". To httperf Ping-Pong benchmark,

  • Reader モナドは引数隠蔽モナド - Life Goes On

    以前にもエントリを書きましたが、Readerモナドがさっぱり分からないので、もう一度勉強してみました。 あまり深く考えずに Reader a を a -> と読み替えると、関数の型は以下のようになります。 関数 型 等価な関数 (>>=) (a->b) -> (b->a->c) -> a -> c (=<<) (a->b->c) -> (b->a) -> b -> c (>>) (a->b) -> (a->c) -> a -> c flip const return a -> b -> a const ap (a->b->c) -> (a->b) -> a -> c <*> liftM (a->b) -> (c->a) -> c -> b (.) ask a -> a id local (a->a) -> (a->b) -> a -> b flip (.) ちょっと確かめてみると、確かに等

    Reader モナドは引数隠蔽モナド - Life Goes On
  • モナドのすべて Haskell におけるモナドプログラミングの理論と実践に関する包括的ガイド

    モナドのすべて Haskell におけるモナドプログラミングの理論と実践に関する包括的ガイド Version 1.1.0 このチュートリアルは、モナドの概念とその関数プログラミングにおける応用に ついて、初中級の Haskell プログラマにわかりやすく、利用価値があるような 解説をすることを旨としています。読者は Haskell になれていることを前提と しますが、モナドに関する経験は要求していません。このチュートリアルは、多 くの題材をカバーしています。後半のセクションでは、前半の題材をよく理解し ていることを前提とします。順をおって、モナドプログラミングを例示するため のサンプルコードがたくさん用意されています。一読で、すべての題材を吸収し ようというのはお勧めできません。 このチュートリアルは 3 つの部分で構成されています。最初の部分は、 関数プログラミングにおけるモナドの基

  • Monad tutorial

    1. 函数プログラミングの集い2011 チュートリゕル 「モナドについて」 株式会社 Preffered Infrastructure 田中 英行 tanaka.hideyuki@gmail.com 2. 自己紹介 • 田中英行 (@tanakh, id:tanakh) • 株式会社 Preferred Infrastructure (PFI) 勤務 – 検索エンジンのゕルゴリズムとか作ってます • Haskell (2004~) • C++ (1998~) • BASIC (1992~) • プログラミングコンテスト愛好家 – ICPC, ICFPC, CodeJam, TopCoder, …

    Monad tutorial
  • Programming Windows in Haskell、次の一歩。 - 取り急ぎブログです

    もうかれこれ半年以上前のポストの続きになるんですが、なんというか、HaskellでWin32を直にたたくスタイルでGUIアプリを書いてみたわけなんですが、前回挫折したのは、ウィンドウごとのステートをどうやって保持するかというところだったわけです。IORefを作ってその中にステートを書き込んだり読み出したりする方法をHaskellCafeなどでも見かけたりしたのですが、個人的にはなんともしっくり来ていなかったわけです。 先日久しぶりにこの辺のことをごにょごにょといじくってみる気になったので、コードをさわっていたわけです。HaskellでWin32アプリを書いたとき一番最初に僕が試したのはウィンドウのステートをShowしてSetWindowText/GetWindowText経由で保存するという技でした。これをやったときはまだIORefなんていうものも知らず、とにかく何か動かしたいと思ってやっ

    Programming Windows in Haskell、次の一歩。 - 取り急ぎブログです
  • MonadIOクラスのこと - 取り急ぎブログです

    昨日のモナドトランスフォーマーの勉強中に使ったliftIOですが、勘違いをしていたことにやっと気がつきました。liftIOの型情報は liftIO :: IO a -> m a と、この関数だけ見るとIOアクションをほかのどんな形のモナドにでも挿げ替えてくれるハッキーな関数のようにしか見えなかったのですが、もうちょっと周りを見ると、実は、このliftIOはMonadIOというクラスのメソッドなんですね。そして、このクラスのインスタンス宣言のほうにも大切な情報が隠れていました。 class Monad m => MonadIO m where liftIO :: IO a -> m a Instances MonadIO IO MonadIO m => MonadIO (ListT m) MonadIO m => MonadIO (ContT r m) (Error e, MonadIO m

    MonadIOクラスのこと - 取り急ぎブログです
  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • haskell-tetris / Main

    Intro/Background http://myawesomeblag.blogspot.com/2007/03/opengl-tetris-in-haskell.htmlCode available here: haskell-tetris.tar.gzCompile with `ghc --make -package GLUT Tetris.hs -o Tetris`Only tested on OS X This program makes use of the following modules: http://haskell.org/ghc/docs/latest/html/libraries/base/Data-Map.htmlhttp://haskell.org/ghc/docs/latest/html/libraries/OpenGL/Graphics-Renderin

  • Haskellと副作用の議論の続き - あどけない話

    twitter で続いている Haskell と副作用、および参照透明性の議論ですが、twitter ではコードを示しにくいので、ブログに書きます。これに対する返答は、twitter でも構いませんし、ブログに対するコメントでもいいですし、トラックバックでも OK です。 多くの人が納得できる説明が見つかるといいですね。:-) 副作用と参照透明性 僕はもともと命令型言語のプログラマーなので、「副作用」という言葉は命令型言語のプログラマーが使う意味で使っています。 Simon Peyton Jones さんは、Beautifull Code というの中で「副作用(side effect)とは、変更可能な状態を読んだり書いたりするような何か」と書いています。そして、副作用を表す型を IO a としています。 Brent Yorgey さんは、The Typeclassopediaで「IOモナ

    Haskellと副作用の議論の続き - あどけない話
  • ヒビルテ(2010-06-06)

    λ. STモナドとSTRefをHaskell上で実装する [FAQ]Haskellには副作用があるのか、ないのか の話。 kazu-yamamotoさんはSTモナドを、「処理系の力を借りないといけないモナド」で、副作用や参照透明性の観点からはStateモナドと質的に違うものだと主張している。 だけど、STモナドが処理系に組み込まれている理由は効率のためであって、意味的にはStateモナドと大差ないし、効率とあと細かい点を気にしなければHaskellレベルでも実装できるはず。 というわけで書いてみたのが以下のコード。 {-# LANGUAGE Rank2Types, ExistentialQuantification #-} import Control.Monad.State import qualified Data.IntMap as IntMap import Unsafe.Coe

  • Haskell の State モナド (1) - 状態を模倣する

    昔、モナドがよくわからなかったので、さまよっていたら、 … ネットで見たMonadの説明で一番私がわかりやすいと思ったのは、Wikibooksの説明。Hello World!がブラックボックスな人は、是非一読を。 (404 Blog Not Found:Haskellで一番難しいのは より) 最初にこの Wikibooksの説明 を読んだのは去年の 11 月頃。そのときの文書のバージョンは  05:13, 27 October 2008 で、今は内容が随分増えている。前の文書は、現在の Haskell/Understanding monads/State に相当するようだ。 ところで、上記の解説を最初読んだとき全く意味がわからなかった。 (@_@;) 「3 Stateful Computations」 では、「ランダムな数字を生成する関数」を例に挙げてモナドの説明がされていたけれど、何が言

    Haskell の State モナド (1) - 状態を模倣する
  • リストモナドの動作原理を考える - あどけない話

    Haskell のリスト内包表記はとっても便利です。あまり意味がないのですが、よく出される例は、こんな感じです。 [(x,y)|x<-[1,2],y<-[3,4,5]] → [(1,3),(1,4),(1,5),(2,3),(2,4),(2,5)] このように、このリスト内包表記は、あたかも二重のループであるかのように動きます。 リスト内包表記は、実は糖衣構文であり、do に直すと以下のようになります。 do x<-[1,2] y<-[3,4,5] return (x,y) → [(1,3),(1,4),(1,5),(2,3),(2,4),(2,5)] 僕は、この意味をずっと理解できませんでした。 "<-" は、モナドという箱の中から、中身を取り出します。たとえば、Just "str" から中身を取り出すと "str" となるように、Maybe モナドを理解するのは簡単です。 でも、リスト

    リストモナドの動作原理を考える - あどけない話