Haskellでスタックを利用した加減乗除の計算機を作ってみる¶ モナドはStateの理解から入ったほうが分かりやすいんじゃないかなぁと。よく あるMaybeとかEitherから入るとStateモナドで激はまりしますよね? 僕はStateモナドから入ったほうがいいんじゃないかなーと思ったのでそんな題 材を考えてみました。自分はPerl,Pythonがフィールドなので、状態付き計算か ら入ったほうがすんなり理解できたし、そういうヒトもいるかなと思って書い てみました。 ちなみに文章のほとんどをコミュニティfでもく もくしながら書きました。あそこを静岡Haskellerの聖地にするべく頑張ってい ます。 尚、特に参考になった(というかインスパイアされた)のが、 Haskell の State モナド (1) - 状態を模倣する すごいHaskellたのしく学ぼうの14.3 計算の状態の正体 状
数日前に頭の中で考えてた駄文。 モナドによって性質が大きく違うことからモナドは掴みにくいものだってのはよく言われることだけど、それは各モナドのbindの特色がfmapに入っているかjoinに入っているかにも関連するのかなと思った。 例えば、ListやMaybeだと、joinは皮を剥ぐだけで面白いことは何もしてなくて、fmapにその特色が入っている。 instance Functor [] where fmap = map map :: (a -> b) -> [a] -> [b] map _ [] = [] map f (x:xs) = f x : map f xs 逆にStateやIOモナドのfmapは値を普通に関数適用するだけで背後にある状態はまったく触らない。面白いことをやっているのはjoinの方で、状態の変更を外側,内側、と順番に逐次処理する役割を担っている。 join :: (M
Interactive code snippets not yet available for SoH 2.0, see our Status of of School of Haskell 2.0 blog post NOTE This content is now being maintained on my personal blog. The content here may be out of date. Let's start off with a very simple problem. We want to let a user input his/her birth year, and tell him/her his/her age in the year 2020. Using the function read, this is really simple: mai
圏は対象と射の集まりだが、その最も要素的なものとして2つの集合(対象)とその間の写像(射)の性質について考えてみよう。 まず、集合 A から集合 B への写像 f があるとする。これが圏になるためには、集合 A のどの要素 a にも対応する集合 B の要素 f(a) が定義されていなければならない。このとき集合 A は射 f の domain で、集合 B は codomain となる。(圏という場合には、射の合成の存在と、結合律と、単位元律が必要だ。定義はこれを満たしているが詳細は省略する。) 例えば、A = [a, b, c] で B = [h, i, j, k] であれば、f(a) = h, f(b) = i, f(c) = j となる射 f と集合 A, B は圏である。 さて、このような集合 A から集合 B への射 f :: A -> B があるとき、それとは逆方向の、 g :
この項目では Haskell に関連する内容に限って圏論の概観を与えることを試みる。そのために、数学的な定義に併せて Haskell コードも示す。絶対的な厳密さは求めない。そのかわり、圏論の概念とはどんなものか、どのように Haskell に関連するかの直感的な理解を読者に与えることを追求する。 3つの対象A, B, C、3つの恒等射, , と、さらに別の射, からなる単純な圏。3つめの要素(どのように射を合成するかの定義)は示していない。 本質的に、圏とは単純な集まりである。これは次の3つの要素からなる。 対象(Object)の集まり。 ふたつの対象(source objectとtarget object)をひとつに結びつける射の集まり。(これらはarrowと呼ばれることもあるが、Haskellではこれは別の意味を持つ用語なので、ここではこの用語を避けることにする。) f がソースオブ
This article needs reformatting! Please help tidy it up.--WouterSwierstra 14:26, 9 May 2008 (UTC) A Practical Approach to Graph Manipulation by JeanPhilippeBernardy for The Monad.Reader Issue 5 BR Date(2005-07-08T20:48:51Z) Abstract. Tree-based data structures are easy to deal with in Haskell. However, working with graph-like structures in practice is much less obvious. In this article I present a
2012-08-21 John Wiegley さんの “Monads in Pictures” を翻訳しました。翻訳の公開は本人より許諾済みです。翻訳の間違い等があれば遠慮なくご指摘ください。 2012年8月20日 John Wiegley 著 2012年8月21日 e.e d3si9n 訳 これはモナドのチュートリアルではないし、ここには数学用語も出てこない。本稿は、既にモナドを一応使えるぐらいには習った人を対象とする。視覚化することで、何のために何をやっているかが明らかになるはずだ。 関数 モナドに対する直感を得る一つの方法として関数からモナドへの抽象化をたどるというものがある。関数が何をやっているのかを簡単な絵で表してみよう。Haskell の関数の呼び出しの構文を上に、同じ演算を視覚化したものを下に置いた: 関数はある値 a を投射 (map) して別の値 b を得る。中で何が起
Written by Eric Rasmussen on December 4, 2013. This tutorial post is going to jump right in to learning about and using the Heist.Compiled module inside a Snap application. If you’ve never used Heist before, you may want to start with the much gentler introduction from my previous post: The Great Template Heist. There can only be one (not really) Heist now comes in two flavors: interpreted and com
データを処理することは、プログラミングのもっとも本質的な部分である。数値、文字列、あるいはデータの集まりなどを扱うために、数々の構造が考えられてきた。Haskellにおいては、「手順」もデータとして扱うことができる。これは、DSLを作るうえで非常に有用であり、ゲーム開発やデータベース操作……手続きがかかわるあらゆるものに応用できるだろう。 手順をデータとして扱う方法として、FreeモナドとOperationalモナドがある。ここでは、Operationalモナドをゲームのキャラクターの制御に用いた例を紹介する。Freeモナドの導入については、Andres Löh氏のHaskell eXchange 2013の講演がわかりやすく、おすすめである。 データを作る アクションゲームの敵の動きとして、この二つを考えよう: 待機 接近(攻撃) 索敵(プレイヤーの位置を調べる) EnemyMというモナ
何の話かというと ほぼ独り言のエントリですが。。。。 昨日、某所の「すごいHaskell」輪読会に参加して、Applicative Functorの章を読みました。本の構成としては、Monadより先にApplicative Functorを定義して、その後の章で、Applicative Functorの拡張概念としてMonadを導入しており、「お。しぶぃねぇ」という感じでした。 なのですが・・・ Applicative Functorにおける<*>演算の具体例の一部で、Monadのdo記法を使用しており、その結果、「文脈から中身を取り出して演算できる(ような気分になれる)」というMonadの特徴と、「文脈から中身を取り出さなくても、文脈内で演算が完結できる」というApplicative Functorの特徴がないまぜになっている点がちと気になりました。 というわけで、私なりにApplica
先のエントリで、直感的な憶測から『「Monadプローブ結合方式」で、ZipListの<*>演算を実現することはできません』と書いたのですが、本当に不可能なのかじっくり考えてみました。 実は、工夫すれば、MonadからZipListを構成できる気がしてきました。。。。(やはり下手な直感に頼ってはいけませんね。"good intuition comes from hard work, not from learning the right metaphor.") リストの長さを考慮しないパターン 以下は、ZipList(MyZipList)をMonadから構成する例です。ただし、後述のようにリストの長さを考慮しないという欠点があります。 myziplist.hs import Control.Monad import Control.Applicative newtype MyZipList
Menu Menu Monad の組み合わせ 今日の元ネタはここ。 http://www.slideshare.net/tanakh/monad-tutorial これと、 http://d.hatena.ne.jp/m-hiyama/20070507/1178496486 これ。 T1 という Monad を作ったのは良いが、これと、IO Monad は一緒に使えるのか。使うにはどうすれば良いのか? Monad M と Monad N があったとする。この合成 Monad MN は、どうすれば作れるのか? M : A -> A, N : A -> A の Functor なので、T = MN とすれば良さそうである。 ηm : 1->M μm : MM->M ηn : 1->N μn : NN->N これから、 μt : 1->T ηt : TT->T ができれば良い。ηt は、 ηt
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く