Haskell
今日は久々にHaskell触った。 実際はこれから明日の分の課題を片していかないといけないわけですが.... 今日講義で扱った、 確率変数が非負整数のときの確率の期待値の計算方法。値が離散的な場合、よく知られているようにその期待値は、 (i=0 → N)Σ(xi * P(…
久々に更新する 最近忙しくて、なかなかPCいじる時間もとれない。 今日は、Haskell IDEを使ってみたよ、というだけの記事です。 Leksahです。 みると、これはYiライブラリを使用しているようですね。 それはなかなかに興味深い。 それはともかく、 前回(数…
Haskellでハノイの塔を解く。 書籍、「C言語によるはじめてのアルゴリズム入門」の内容をそのまま落とし込みました type Disk = Int type Disks = (Int,[Disk]) type Pillar = [Disks] hanoi :: Int -> Pillar ->IO() hanoi 0 _ = return () hanoi n [(a,p1)…
今も弄ってたのですが、gitHubの使い方が段々分かってきました。 どのPCからでもアクセスできるのが便利ですね。 まあ面倒なのでFedoraからしかcommitはしないですが。 で、前回(?)記事にした、ノベルゲームを作るための前段階としてセーブ関数ロード関数を…
昨日コンパイルエラーに悩まされて中断して寝てしまったLoad関数のパーサ。 今再挑戦したらすぐにできました。 よかったよかった。というわけで。 今朝書いた、parseRun及びparseListと、その他。 最後のreturn関数部分をどう書いたらいいか悩んでいたんです…
いい加減、Haskellで何かまとまったものを作らないと、このもやっと感が消えてくれないのです。 というわけで。 GUIはまとまった時間が取れないとなかなか勉強する時間とれそうにないので、周辺パーツから揃えていくことに。 データをsaveするための関数を作…
眠い...... 一度集中力がきれたらあとはダラダラになってしまうのが私の悪いところ。 Parsec使ってカリカリしてましたが、最後の詰めが書けない..... とりあえず今日、できあがったところまで import Text.Parsec import Text.Parsec.String import Types fa…
今回学園祭でコント二つやりますが、 今後もそういう機会があるだろうし、ノベルゲームエンジンも作りたいなと思うし、 そのためのツールを何かHaskellで作ろうかと考えています .....が。 なにも構成が決まらない。 とりあえずエディタのような形式になるか…
Haskellでの時間待ち、waitはどのようにしたらよいのでしょうか。 クイックソートの時間比較の際に使った、 正格評価関数 ($!)::(a->b)->a->b を使って何か意味のない計算をさせて遅延させることも可能ですが、 スマートではないですね。threadDelayという関…
まずは誤りコード(正コードは下に) module ClassTest where data MyList a = List a (MyList a) | Nil deriving Show instance Monad MyList where return x = List x Nil Nil >>= f = Nil List x xs >>= f = f x fail s = Nil --おまけ myConcat :: Show …
今日は型クラスの勉強 というわけで。 図書館で見つけた本を参考に module ClassTest where import Prelude hiding ((==),(/=)) class MyEq a where (==),(/=) :: a -> a -> Bool a == b = not $ a /= b a /= b = not $ a == b instance MyEq Integer where …
トランプを分配する問題 ttp://ameblo.jp/programming/entry-10001721422.html import Data.List trampf :: Int -> String -> [String] trampf n cs | n > length cs = repeat "" | otherwise = zipWith (++) as $ trampf n bs where as = heads n cs bs = d…
与えられた値 a と数字列に対し、 数字列の部分和が a に等しくなることがあるかどうかを判定するという問題。 昔解いたときはタプルとか使ってややこしく解いた気がするけど、割合スマートに解けた気がするので main = do an <- getLine cs <- getContents …
ttp://poj.org/problem?id=1852 にある、蟻の問題。(POJ,No.1852) どうやるのか思いつかなかったけど、解放読んだら感動したので書いてみた。 datalist :: Int -> String -> [Int] datalist n = map read.take n.words minf :: Int -> [Int] -> Int minf l…
今日、どうにも良い方法が見つからなかったので、大学からの帰りに本屋でプログラミングHaskell読んでライフゲームのヒントを探してみました。すると なるほど!まさになるほど、といった感じ。 現在生きているセルをタプルのリストで保持してやればいいんで…
imageJは偉大なり。 全然知らなかったのですが、画像データをテキストデータにして保存したり、テキストデータから画像をおこしたりできるのです!! 早速、昔作った画像をいじってみましょう これが元データ imageJで取り込んで、Text imageにして保存。ソ…
線形合同法による疑似乱数を作って遊んでたら面白いものができた。 linearRand :: Integral a => a -> a linearRand x = (456*x+759) `mod` 24 何を渡しても 15 が返ってくる笑 定数w 値が1違うだけで全然違いますね rand_list :: Integral a => [a] rand_l…
(?) :: (Ord a,Num a) => (a,a) -> Bool (?) (x,y) = 1 > x^2 + y^2 pi' :: Fractional a => a pi' = 4.0*fromIntegral (length $ filter (?) dots) / fromIntegral (length dots) dots :: (Enum a,Fractional a) => [(a,a)] dots = [(x,y) | x <- [0.01,0.0…
さて、では、時間測定も出来るようになったことだし、クイックソートを比較してみます。 因みに、渡すデータは、[1000,999..0]で実験。qsort :: 0.3070175s qsort' :: 0.1530088sおや、filter関数使用の方が早いのか?統計をとってみます。 5回試行 qsort ::…
下のように、クイックソートの実行時間を調べためのrecordTime関数を定義。 qsortはリスト内包表記、 Qsortはfilter関数を使った見易い定義によるもの。 この二つで果たして実行時間は変わるのか! と思ってやってみたけれど、どれも結果は 0s..... 比較でき…
今日大学の図書館で午前中書籍を物色していたら。 Arrayモジュールなるものがあることを知る。 むしろ今まで知らなかったのがショックだが....Haskellでの配列表現が可能です。 こ、これは! これで多次元配列を実現すればダイクストラも出来るのでは!!第1…
今まで実はHaskellにおいてinstance宣言を使ったことが無かったのでどういうものなのかよく知らなかった。 なので調べてみることに。身近な実例を探すと、リストモナドの定義があった。 instance Monad [] where xs >>= f = concatMap f xs return x = [x] …
モナドについて、今までStateモナドとGet,ついでにいえばApplicative程度しか使ったことがないので、その他のモナドも、 ttp://www.sampou.org/haskell/a-a-monads/html/ を参考に勉強していくことにする。 というわけで、まずは Identityモナド newtype Ide…
ttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0502 にある問題。 本来は、連続して入力を受け付けるのですが、それは愛嬌。リストだけでも解けるけれど、Stateモナドの練習がてら。 import Control.Monad.State type PlayState = ([Int],Int) t…
部分適用は、カリー化によって可能となる。 では、カリー化とは。 すべての関数は一引数の関数として扱うこと。 f :: Num a => a -> a -> a と定義された関数があるとき、fは2引数の関数である。 これに、例えば Numクラスに属する型の値 x を適用すると、(…
ttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0501 の問題。 toTouple :: [String]-> (String,String) toTouple (a:b:_) =(a,b) trans :: Int -> String -> Char -> String trans n cs c = case lookup [c] (maketable n cs) of Just a -> a No…
AOJなるものがあるらしく。 まずは簡単なものから解いてみることに。 解答の提出方法とかわからないし、出力の形式整えるの邪魔くさいので、ちゃんとした正答かどうかなんて知りません笑 Haskellで、 ttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?…
昨晩リストモナドの勉強をしていたんですが、なぜあのときに気づかなかったんだろう。 朝起きたら気づいた。 昨日書いた、電車の切符問題の、演算子列挙について。 今のままでは、"+-*"がそれぞれ1度ずつでてくる、計6通りしか網羅できなかったけれど、リス…
明日から一週間家を離れるのでブログの更新が滞ってしまう。 なので、その前になにか書こうかと思ったけど、ちょっと面倒な問題にぶつかってしまった..... タイトルのとおり、 電車乗るときに買う切符に印字されている4桁の数字、 あれから、10の数字を作れ…
とりあえず、動作までを確認したもの。judge "1234" のように、judge関数に、切符の値を渡してやればjudgeしてくれます。あとは、演算子の組み合わせを全部網羅するようにしてやれば完成です。 んー、どうやろう。 oは、operatorのo,vは、valueのvです。 mod…