2011-01-01から1年間の記事一覧

Dyad

Maarten Fokkinga の Dyads。使い道は謎。 {-# LANGUAGE Arrows, MultiParamTypeClasses, FunctionalDependencies, TypeOperators #-} module Main where import Prelude import Control.Arrow import qualified Control.Category as Cat import Control.Mon…

Template Haskellで遊ぶ

Ross Patersonの論文に面白いデータ構造「homogeneous functions」があって: type Pair a = (a, a) data BalTree a = Zero a | Succ (BalTree (Pair a)) deriving (Show) -- the homogeneous functions data Hom a b = ( a -> b ) :&: Hom (Pair a) (Pair b…

Arrowの話をしよう (2)不動点と再帰

今回圏論の話は出ません。 関数型言語勉強の中に、不動点コンビネータは避けては通れない道ですね。不動点とかなんとなく難しい印象がありますが、意外に簡単です。以下は定義(Wikipediaから): 関数 f の不動点とは、関数 f(x) = x を満たすような x のこ…

Arrowの話をしよう (1)ArrowとArrow記法

Q: そんなタイトルで大丈夫か? A: 大丈夫だ、問題ない。Q: Arrowってなに? A: あれは今から36万…いや、1万4千年前だったか…まぁいい、私にとってはつい昨日の出来事だが、君たちにとっては多分明日の出来事だ。彼には72通りの名前があるから、なんて呼べば…

return2について

mclh46さんの記事のreturn2についていろいろと考えました。そして「つまりreturn2は二択returnのことですね」と勝手に結論を付けました。ならば最近見ているControl.Arrowの中にもこういう選択的な機能をサポートする関数があります。 (|||) :: a b d -> a c…

FizzBuzzをArrowで

元ネタ: FizzBuzz問題から学ぶモナド FizzBuzzをモナドで - トウフ日記 とにかく書いてみた。もう何番煎じ? import Control.Arrow fizzbuzz = mapM_ (putStrLn . ((fizz &&& buzz >>> chain) &&& nofb >>> chain)) where fizz x | x `mod` 3 == 0 = "Fizz"…

モナドも、コモナドも、あるんだよ(後篇)

前篇のつづき、コモナドを話す前にまずDualityについて復習しよう: 圏論にて、ある物の双対(Dual)を次のように定義する: この定義はつまり確定的に明らかであること:矢印をひっくり返すだけ簡単な仕事です。 ある構造xxxに対して、中の要素をすべてdualを…

Category of algebras

自然数の集合Nに対して、関数f x = x * nを定義すれば、{N,f}は圏であることは明らかだろう: objects: n morphisms: f: n -> n' id: f x = x * 1 そこで、fはもう一つの圏のmorphismsとして働くことができる、Haskellの例: foo :: (Int -> Int) -> (Int ->…

モナドも、コモナドも、あるんだよ(前篇)

さて、今回はみんな大好きなモナドだよ、まあ俺もそうだけど。まず圏論のmonadから見てみよう: はendofunctor*1。今私たちの手元にmorphisms がある。問題は:どんな状況の下で、の意味を変更する事により、が別の圏にのような形式になるのか? まず、何ら…

Haskellの型システムについて

今後も使う予定なのでメモしとく。 詳細は↓の文章を参照してください: http://en.wikibooks.org/wiki/Haskell/Category_theoryHaskellの型システムが圏であり、ここでHaskと名をつける。 Haskの要素は下表通り: Category Hask objects 型の集合{Int, Doubl…

これ機能満載だな、数式もできるんだ...

例えば: 詳細は: http://hatenadiary.g.hatena.ne.jp/keyword/%E6%95%B0%E5%BC%8F%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%EF%BC%88tex%E8%A8%98%E6%B3%95%EF%BC%89 http://www.forkosh.com/mimetexmanual.html http://www.forkosh.com/mimetextuto…

米田の補題について

先ずはHomo functorの定義: h(-,C): Cop -> Set さらに: h(-): C -> (Cop -> Set) functor h(-) は米田埋め込み(Yoneda embedding)という名があり、Yと表記される。 米田の補題(Yoneda lemma)は下記となる: ∀F ∈ (Cop -> Set) と ∀A ∈ C, ∃ fA,F: ( h(-,A)…

プログラミング言語「あずにゃんペロペロ」

動機はこれを見た後: プログラミング言語「ほむほむ」。 http://d.hatena.ne.jp/yuroyoro/20110601/1306908421 改造元はunlambda, ` あずにゃん i → ぺロぺロ d → ペロペロ c → ぺロぺロ v → ぺロぺロ s → ぺロぺロ k → ぺロぺロ r → ペロぺロ . → ペロペロ 出力コ…

意外と便利だな

へぇ、ソースコード着色機能あるんだ、知らなかった。 template<class T> struct foo;</class>

C++を勉強しすぎると

このような拗ねたコードしか書かなくなるぞ。 //VBスタイルForの静的バージョン。正直これ需要あるのwww //パフォーマンスについて、全部inline関数使ってるから、コンパイラーが最適化かけたらフラットに展開される筈。 //使い方:VB_ForVB_For] >( 関数ポ…

初回記念

スラマッパギ