Haskell

円周上の点を有理点で近似したかった

講義のレポートで、 で図を書く時に必要になったので、メモ。 の貧弱な数値計算環境では、sin, cos を気軽に計算することは、多大なコストを要する。 そこで、出来るだけ簡単な有理点で近似してやろうということになった。アイデアは簡単で、三角関数の間の…

HaskellでCPSのお勉強

モナドの合成をマジメに勉強しようと思って次のページ All About Monads に行って、第III部の頭で面食らった人は僕だけではないはず... Continuationモナドは使わない方が良いって書いてあったのに。 そして、僕はContinuationモナドは知らないんだ。 なので…

行列演算がしたいと思いました。

最近全然haskellというか、コンピュータプログラム全般に触れていなかった。 いや、トポロジーって面白いんだよ。 ドーナツと間違えてコーヒーカップを食べ始めるという冗談を実践しかねない程に。それで、行列演算を実装したい。 その準備として、今まで使…

Reactive+Gtkでライフゲーム

GUIとFRPの練習に作ってみた。 ↓参考 http://d.hatena.ne.jp/maoe/20100109/1263059731 ただし、Gtk+との連携は試行錯誤の末なので、もしかしたら正統のやりかたでないかもしれない。ソースコード module Main where import FRP.Reactive import FRP.Reactiv…

gtk2hsのインストール

Cabalの入れ方によっては、インストールにつまずくので、メモ。 まず最初に(僕の環境では)、alex, happy なるパッケージが必要だった。 $ sudo apt-get install alex $ cabal install alex happy (もちろん、aptでlibgtk*とかは入ってる必要があるけど、…

不動点コンビネータについてメモ

不動点コンビネータとは、domainとtargetが一致している写像を取り、その不動点すなわちであるような点の一つを返す写像のこと。 すなわち、関数を不動点コンビネータとすると、任意のに対して、 を満たす。上の定義では、数学的に不動点コンビネータが必ず…

スタック構造でStateモナド

Haskellでは、変数に再代入ができないので、例えばスタックに対する処理として、 typedef struct _IStack{ int val; struct _IStack *next; } IStack; int popIStack (IStack **stack) { int ret = (*stack)->val; IStack *tmp = (*stack)->next; /*こんな破…

並べかえ

をしてみようと思って、書いてみた。 module Main where import Debug.Trace import Random permutation [] = [[]] permutation s = concatMap (makeTail) [0..length s-1] where makeTail n = uncurry (\x xs->map (x:) $ permutation xs) $ pullElem n s p…

モナドの勉強を始めようと思ったが

その前に、リストがモナドのインスタンスだという事を実感しようと思う。 昔作ったエラトステネスの篩関数のリスト内包表記部分をモナドの演算子で書いてみるみる。 -- sieve.hs sieve [] = [] sieve (x:xs) = x:sieve[y|y<-xs,y`mod`x/=0] sieveM [] = [] s…

k乗の級数

とある必要があって をNの式として求めないといけないことがあった。 k=1,2,3の場合については、高校の授業でやるよね。 それ以上の場合についても、次の方法を使えば良いということもその時わかった。 つまり、 なのだから、これを整理して、次の漸化式にな…

(Integer,Integer)へのリニアアクセス

方程式の整数解を力技で見つけよう思った時に、から、への全単射があると便利、というより、それが無いと解けないとすら言える。数学的にこれらの濃度が等しい事を証明するためには、が、有限集合の可算個の和集合に書ける事を言えば良かったから、あらわに…

haskellの数独求解プログラムが遅いという問題

ファイルサイズが巨大だという問題は今は置いておいて、実行速度について、調べてみた。 プロファイラで調べてみる(参考 http://itpro.nikkeibp.co.jp/article/COLUMN/20110308/358081/)と、実行速度について、以下のような結果に total time = 0.64COST C…

数独自動求解プログラム C言語との比較

やっぱりC言語の方が速い。 同じアルゴリズム(は厳密には使えないけど、大雑把に戦略が同じ)で↓のプログラムをC言語に書きなおして実行した結果、C言語では、間なんかあかずに、一瞬で全ての解が表示される。あと、ghcでコンパイルした実行ファイルは、何…

数独自動求解プログラム

そういえばhaskellの事を全然書いてないので、以前作った数独自動求解プログラムを貼ってみる。 -- 数独自動求解プログラム -- Sudoku.hs module Sudoku where get_possible :: [Int] -> Int -> [Int] get_possible s i = [x | x<-[1..9], not$elem x (conca…