2015年4月6日のブックマーク (10件)

  • モノイドと継続渡しの道具箱 - モナドとわたしとコモナド

    関数型言語Haskellにおいて、普通は計算の結果は関数の戻り値として扱うが、「結果を受け取る関数」 に渡すという継続渡しというスタイルもある。これは単なる冗長なやり方ではなく、様々な興味深い性質を持つ。 基形は、aという値を渡すところを ∀r. (a -> r) -> r のような表現にする。たとえば、与えられた数の42倍を渡したいとき、そのまま\x -> x * 42ではなく、\x f -> f (x * 42)と書く。もちろんこれだけではありがたみが分からない。 さて、与えられた文字列の中のうち、大文字のアルファベットを取り出し、それがアルファベットの何番目か計算するプログラムを作りたい。普通はリストを使ってこのように書くかもしれない。 import Data.Char uppers :: [Char] -> [Int] uppers [] = [] uppers (x:xs) |

    モノイドと継続渡しの道具箱 - モナドとわたしとコモナド
  • Freeモナドを使っている方、あるいはこれから使う方へ - モナドとわたしとコモナド

    FreeモナドのベースとなるFunctorは、GHCのDeriveFunctor拡張を使って、対象のデータ型にderiving Functorをつけることで 自 動 生 成 できます。 例 {-# LANGUAGE DeriveFunctor #-} import Control.Monad.Free data CharIOBase a = GetCh (Char -> a) | PutCh Char a | EmbedIO (IO a) deriving Functor type CharIO = Free CharIOBase とすると、 https://github.com/ghc/ghc/blob/ghc-7.6.2-release/compiler/typecheck/TcGenDeriv.lhs#L1407 の規則に従い、 instance Functor CharIOBase

    Freeモナドを使っている方、あるいはこれから使う方へ - モナドとわたしとコモナド
  • Freeモナドでゲームを作ろう!第2回: 本当に動かす - モナドとわたしとコモナド

    連載目次 第0回: 概要 第1回: Gameモナドの基 Haskellの力を最大限に引き出す 前回紹介したような関数の組み合わせでももちろんゲームは作れるのですが、今回は、さらにゲームを開発しやすくするための手法をいくつか紹介し、その例を実際に動かしてみます。 Vec2 2Dゲームを作る上でベクトルの演算は必須です。vectというライブラリは、二次元から四次元までの範囲でベクトルや行列の操作ができる、非常に便利なライブラリです。二次元に絞って主要な関数をいくつか紹介しておきます。 Edward Kmettさんから「linearを使った方がいい」といったアドバイスを頂いたので、free-game 0.9ではlinearを採用しました。零次元から四次元までの範囲でベクトルや行列の操作ができる、非常に便利なライブラリです。二次元に絞って主要な関数をいくつか紹介しておきます。 V2 :: a -

    Freeモナドでゲームを作ろう!第2回: 本当に動かす - モナドとわたしとコモナド
  • Freeモナドでゲームを作ろう!第1回: Gameモナドの基本 - モナドとわたしとコモナド

    連載目次 第0回: 概要 第1回: Gameモナドの基 (この記事) free-gameを使う さて、みなさん、free-gameはインストールしましたか?まだの型方も、もうインストールした方も、日free-gameを更新したのでcabal update && cabal install free-gameしましょう。 2013/5/6: free-game 0.9.3をリリースし、内容も改訂しました。必ずcabal update && cabal install free-gameしてください。 free-gameは、Gameモナドという独自のモナドによってGUIの抽象化を実現しています。GameはFreeモナドによって生成されたモナドであり、元は単なるFunctorです(これが何を意味するかは、連載の中で明らかにしていきます)。 今回は、実際にプログラムを組みながら、どのようにして

    Freeモナドでゲームを作ろう!第1回: Gameモナドの基本 - モナドとわたしとコモナド
  • Freeモナドでゲームを作ろう!第0回: 概要 - モナドとわたしとコモナド

    連載目次 第0回: 概要 (この記事) 第1回: Gameモナドの基 先ほど、free-gameというライブラリをアップロードしました。free-gameは、世界で一番柔軟かつ簡単にゲームなどのGUIを作れるライブラリを目指しています。 Freeモナドとは Freeモナドは、Functorを与えると自動的にモナドを生成してくれる構造で、これを使うことで、アクションをデータの一つとして柔軟に扱えるようになります。去年の10月ごろからにわかに日のHaskeller間で流行り始めた、今一番熱いモナドです[要出典]。Freeモナドそのものに関してはこれらの記事を読みましょう。 Haskell for all: Why free monads matter そろそろFreeモナドに関して一言いっとくか 型クラスとモナドと Free モナド - あどけない話 Freeモナドって何なのさっ!? -

    Freeモナドでゲームを作ろう!第0回: 概要 - モナドとわたしとコモナド
  • GitHub - schani/clojurec: A Clojure implementation on top of C

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - schani/clojurec: A Clojure implementation on top of C
  • Program imperatively using Haskell lenses

    Haskell gets a lot of flack because it has no built-in support for state and mutation. Consequently, if we want to bake a stateful apple pie in Haskell we must first create a whole universe of stateful operations. However, this principled approach has paid off and now Haskell programmers enjoy more elegant, concise, and powerful imperative code than you can find even in self-described imperative l

  • 書評「型システム入門」 - 純粋関数空間

    追記:Amazonのリンクを張っていますが、オーム社のサイト http://estore.ohmsha.co.jp/titles/978427406911P からも購入できます。 AmazonKindle版はまだ出ていないようですが、 こちらからは今現在でDRMなしのPDFも購入できます。 Kindle版リリースの際にも、 フローレイアウトになる予定はないそうですので、 Amazonにこだわりがあるのでなければ、 電子版で読みたいという方は、こちらから購入されるのが良いかと思います。 あらかじめお断りしておきますと、 この記事は書評ではなく、宣伝です。 数年前に原著を読んだ時から、 書は私の中では間違いなく良書ということになっておりますので、 私がいまさら内容の善し悪しを語ることには、 はじめから意味がないと思っております。 なのでここでは、このの魅力、読んで欲しい人、どういう風に読

  • TLE 2015 - 純粋関数空間

    TLE 2015というプログラミングコンテスト http://felicity.iiit.ac.in/contest/tle/ で香風智乃さんが優勝されました。 春休みの宿題の良い息抜きになったそうです。 記事を言付かっておりますので、ここに掲載させていただきます。 雑感 Twitterにリンクが流れてきたのでやってみたのですが、割と面白かったです。 Distinct Substrings 与えられた文字列に対して相異なる部分文字列の数を数えるだけの問題なのですが、 スコアが「提出したソースコードの異なる部分文字列の数 / 提出したソースコードの長さの2乗」で計算されます。 なんだこの問題…。 適当に書いたコードの後ろにランダムな文字列をくっつけて送ったら、 理論値の0.5に近いスコアが簡単にでたので、そのまま放置です。 Find the GCD 2000桁ぐらいの整数2つが与えられるので

  • 円周率.jp

    定義 円周率について 多角形を用いた求め方 確率を用いた求め方 なぜπを使うのか arctan とは 円周率の値 100万桁まで 連分数 近似値 円周率記憶 記憶桁数の記録 覚え方 円周率計算記録 手計算(正多角形) 手計算(arctan) コンピュータ 個人コンピュータ 円周率を求める公式・アルゴリズム 多角形の利用 arctan系 Ramanujan系 連分数系 AGM系 Borwein系 BBP系 円周率計算プログラム 計算プログラムの紹介 Spigot プログラム 多倍長計算について 加減算 乗算 Karatsuba 法 Toom-Cook 法 FFT Newton 法 Binary splitting法 DRM法 その他 雑記(後でどこかに纏める情報) 参考文献