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

ヽ(〃l _ l)ノ

http://c4se.hatenablog.com/entry/2012/12/01/180025 monga = mod mOm0n ngA momoNga = momo ngA momoNga : mOm0n ngA (mom0 ngA momoNga) mom0 = drop m0m _ [] = [] m0m on ((ga, mon):m0) = (momo ga (mom0 mon on)) ++ m0m on m0 mom = [4,5,3,4,5,5,4,…

A HASKELL ADVENTURE IN WINDOWS(超訳)

Haskellでゲームを作るのは良いんだけど、Windowsでも動作するようにはしたいよなぁとは思っているので、その方法についてあちこち調べ回っていて、hackageのSDLのページからリンクをたどってたどり着いたANIMAL-MACHINE.COMというサイトのA HASKELL ADVENTU…

Haskellでチャーチ数

色々と記事にしたいネタはあるのですが、どれもちゃっちゃと書ける感じでは無いので、今日はちょっと小ネタ更新します。前々から、「チャーチ数とかHaskellなら簡単に表現できんじゃね?」とか思ってたのですが、どうやってshowするか思いつかないし考えるの…

Freeモナドって何なのさっ!?

最近Haskellerの間でFreeモナドが熱いです。 Haskellで悟りを開いた人がFreeモナドで再び悟りを開いたりして、なんかよく解らないけど凄いことになっている今日このごろですが、すっかり乗り遅れていました。どうも、貴女のちゅーんです。 で、皆こぞって「…

関数型プログラミングの実用性だとか将来性だとか

に、ついて語ろうとすると、どうしても漠然とした話になってしまって、なかなか切り出せないのですが・・・ちょっと今日、こんな記事を見つけまして。【開発閑話】文系プログラマが関数型言語(とラムダ計算)を理解してみる【初心者向け解説】「ご指摘やご…

Haskellでゲーム開発 - SDL-Imageで画像を表示

とりあえず、ゲームを作るなら画像が描画できなくては話になりませんね。 というワケで、どうやってSDLで表示した画面に画像を表示するかという話を書きます。 もともとSDLにはBMPを操作するための関数が用意されていたりしますが、対応してるフォーマットが…

Haskellでゲーム開発 - メインループとイベント操作

そろそろHaskellでゲーム開発なんか真面目にやっていこうかなぁとか思いつつ、SDLの勉強しています。 並行してやってる色んな事を総スルーしながら、やっていきます。気分屋なのでやることがコロコロ変わるのは悪いくせですね、はい。 というわけで、Haskell…

おめが言語

昨日の話ですが。 なんというかこう、あんまり言及したくないような残念な感じのハッカソンに参加してきました。作った物はコレです。*1 ΩΩωΩΩΩΩΩΩΩωωΩΩωωωωωωωωωωωΩΩΩΩΩωΩΩωωΩΩωωωωωωΩΩΩωΩΩωωωωωωωωΩωΩΩωωΩΩωωωΩωωΩΩΩΩΩΩΩΩωΩωωωΩωωΩΩΩΩΩΩΩΩωΩええと、このフ…

駆け足MongoDB with Ubuntu

ええ、プログラマのクセに自宅のPCに何もDB環境が入っていない状態は非常に宜しく無いので、大急ぎで入れます。 なんでMongoDBかは気にしないで下さい、最近仕事でOracleのSQLばっかり書いているのでRDBSは使いたく無かったのです。 インストール 鍵をどーに…

CUI超お手軽英語辞書

巷で「すごいH本」と話題の「すごいHaskell楽しく学ぼう」をAmazonで購入しようと思ったのですが、思いの外人気らしくて、入手に時間がかかりそうでした。すごいHaskellたのしく学ぼう!作者: Miran Lipovača,田中英行,村主崇行出版社/メーカー: オーム社発売…

何故、関数型言語Haskellを学んでいるのか #fpstudy

大阪で開催された「第一回関数型言語勉強会」に発表者として参加してきました。 その準備等の関係で、しばらくダイアリーが付けられていませんでしたが、ちまちま再開していこうと思います。会場のGoogleマップが別の場所を指していたり、そもそも降車駅を間…

Haskellコードゴルフ:サイコロ問題

リスト内包表記を使えば、「サイコロを3回振った時の組み合わせ」のような、組み合わせのリストを作ることができます。 Prelude> [[x,y,z]|x<-[1..6],y<-[1..6],z<-[1..6]] [[1,1,1],[1,1,2],[1,1,3],[1,1,4],[1,1,5], 〜略〜 ,[6,6,5],[6,6,6]]数の組み合…

プログラミングと才能のはなし

どうも最近更新できてないので、今日はコード無し、ちょっと駄文を書かせてもらいましょう。すこし古い記事ですが・・・プログラミングできる人とできない人との間の深い溝 http://d.hatena.ne.jp/masatoi/20090707/1246965336昨日、たまたまTwitterで見かけ…

ちょび〜っとだけvimをカスタマイズ

vim

ほんとに、ちょびっとだけ。カスタマイズと呼ぶのが恥ずかしいほどです。とにかくscalaのコンパイル/実行手順が面倒で、小さなテストに一々MakeFileを作るのもアホらしい話なので、軽くVimScriptの書き方を調べて、次のような.vimrcファイルを仕立ててみま…

Scalaに挑戦してみた

関西で開かれる関数型勉強会で、発表する機会を得たので、Haskell以外の関数型言語にも触れておく必要があると考えて、Scalaの使い方を覚える事にしました。 Scalaは今も後需要が高まっていきそうな言語なので、使えるようにしておくのは良いかもしれません…

ポイントフリースタイルの歪んだ美

例えば、xを2倍してshowする関数fを考えます。 素直に書けば次のようになるでしょう。 Prelude> let f x = show (x * 2) Prelude> f 5 "10"こういったシンプルな処理は、ポイントフリースタイルにするのがHaskellらしいプログラミングですね。 Prelude> let…

Haskellでチューリングマシン(4) 命令の実行処理を作成

前回、テープの走査をモナドに包む時に、テープの値と一緒に、「ヘッドのステータス」を状態として保持できるようにしました。 この値は単なるInt型として実装したのですが、明確なアイデンティティを与えるため、HeadStateという別名を付けました。 --ヘッ…

Arrowの基本(3) |||演算子で条件分岐

Arrowの基本、三本目の記事は、Arrowが関数を繋いでいく流れの中で条件分岐を作り出す ||| 演算子の再実装をしていきます。 Prelude Control.Arrow> :i (|||) class (Arrow a) => ArrowChoice a where ... (|||) :: a b d -> a c d -> a (Either b c) d -- D…

Haskellでチューリングマシン(3) モナドを使ってどうするか

チューリングマシンを作るに当たって、テープを操作する処理をモナドにするというのを試みたわけですが、もとよりモナドの使い方がよく解っていないため改めて見返すとなかなか酷い出来です。結局、自分でもしっくり収まっていなかったのでしばらく停滞して…

状態系モナドの作り方

よく言われている事ですが、モナドには副作用を再現する「状態系モナド」(IO、State等)と、値が無い状態や計算の失敗を扱う事ができる「失敗系モナド」(Maybe、List等)の二種類に大別できます。今回の題材は、「状態系モナド」を扱います。 状態系モナド…

Arrowの基本(2) 関数を並列に繋ぐ ***、&&& 演算子

前回からの変更点: 実際の実装に合わせて、各MyArrowクラスから関数を取り出す関数は MyArrow型クラスに定義したrunArrでは無く、各型定義のアクセサ関数を使うようにします。 module Main where --Arrow型クラス class MyArrow a where myarr :: (b -> c) …

Arrowの基本(1) >>>演算子で関数を繋ぐ

前々から気になっていたArrowを覚えるべく、あちこち資料を探してみたものの、そもそも日本語の資料が少ないので。自分で色々いじって試してみる事にしました。 一つの日本語資料として活用できるように、手順を追って何回かに別けてなるべく詳細に書いてい…

Haskellで普通にFizzBuzz

深い意味は無いです、そういえば書いたこと無かったなぁと思ったので・・・ module Main where fizzbuzz :: Integer -> String fizzbuzz x | x `mod` 15==0 = "FizzBuzz" | x `mod` 3==0 = "Fizz" | x `mod` 5==0 = "Buzz" | otherwise = show x main :: IO …

型の練習

ネタが無いのでnewtypeの練習で書いたコードを晒します。 module Main where --単価 newtype Price = Price Int deriving (Eq,Show,Read) instance Num Price where _ + _ = error "You can`t calculate Price + Price" _ - _ = error "You can`t calculate …