Haskell

オオカミとヤギとキャベツを移動させるやつ

研究室の一部の人が uppaal で解こうとしていた問題。 オオカミとヤギとキャベツを対岸に移動させたいけど、オオカミとヤギ、あるいはヤギとキャベツを残したまま人が対岸に行ってはダメ、というやつ。 最初は prolog でやってやろうとしたけど、くじけて Ha…

10分でコーディング

頑張ってブログを書こうキャンペーン中。理由は特にない。 http://ameblo.jp/programming/entry-10001721422.html のやつ。 then の中はもっと綺麗にかけるんじゃないかと思うんだけど。 deal :: Int -> [Int] -> [[Int]] deal num cards = let (h,t) = spli…

macports の hs-cabal

macports で入れた cabal がアップグレードできなかった。 $ sudo port upgrade hs-cabal > Configuring hs-cabal Error: Target org.macports.configure returned: shell command "cd /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync…

prolog 処理系もどき

久しぶりの日記。今日は飲み会で揚げ物ばっかり食べて、しかもそのあとラーメンまで食べるという暴挙にでたのでお腹の調子が大変よくないのですが、今日の昼間に適当に書いた prolog 処理系っぽいものをはっておく。 現状ではパーサとかはまったくないので、…

Project Euler: Problem41

pandigital の中で最大の素数を求める。1桁から9桁までの pandigital は40万個くらい。このままだとスタックオーバーフローする。 import Data.List pandigitals 0 _ = return 0 pandigitals n xs = do x <- xs xs' <- pandigitals (n-1) (filter (/=x) xs) …

Haskell から C を呼ぶ (FFI)

Haskell から C 言語で書いた関数を呼ぶには。http://haskell.g.hatena.ne.jp/jmk/20060622/1150947486を見れば完璧だが、とりあえずこれだけでいいよ、という最小サンプル的な意味でメモ。 factorial.hs {-# LANGUAGE ForeignFunctionInterface #-} import …

Hoogle + Opera

あぁー、リストの要素をある条件で2つにわけたいけど絶対これライブラリにあるよー名前なんだろうーというときのために備えて。 Opera の検索エンジンに以下を加えるがよい。 http://www.haskell.org/hoogle/?hoogle=%s つまりこうだ! うわっ、キモい! 研…

HUnit とその自動化

最近テストファースト的なものを試しているので、Haskell の HUnit を使ってちょっと遊んでみた。ところが、実施するテストを選ぶのがめんどい。具体的にはこんな感じ。(HUnit 1.0 User's Guide) test1 = TestCase (assertEqual "for (foo 3)," (1,2) (foo 3…

Project Euler: Problem29

import Data.List main = print $ length $ nub [a^b | a <- [2..100], b <- [2..100]]

Project Euler: Problem26

import Data.List countCycle n m stack | rem (n*10) m == 0 = 0 | otherwise = case findIndex (== rem (n*10) m) stack of Nothing -> let remainder = rem (n*10) m next = n*10 - (div (n*10) m)*m in countCycle next m (remainder:stack) Just x -> x…

Project Euler: Problem40

import Data.Char main = print $ summation 1 $ concatMap show [1..] summation n (x:xs) = case n of 1 -> digitToInt x * summation (n+1) xs 10 -> digitToInt x * summation (n+1) xs 100 -> digitToInt x * summation (n+1) xs 1000 -> digitToInt x …

Project Euler: Problem21

いわゆる現実逃避である。 sumOfDivs x = sum $ filter (\y -> rem x y == 0) [1..(div x 2)] amicables = filter (\n -> let t = sumOfDivs n in n == sumOfDivs t && n /= t) [2..10000] main = print $ sum amicables

Project Euler: Problem47

決して暇なわけではない。 import Data.List prime = p [2..] where p (x:xs) = x : p (filter (\y -> rem y x /= 0) xs) factor n = f n prime where f 1 _ = [] f n (p:ps) | rem n p == 0 = p : f (div n p) (p:ps) | otherwise = f n ps finder 4 (x:_) …

Project Euler: Problem124

Haskell だと "(1,2) import Data.List prime = p [2..] where p (x:xs) = x : p (filter (\y -> rem y x /= 0) xs) factor n = f n prime where f 1 _ = [] f n (p:ps) | rem n p == 0 = p : f (div n p) (p:ps) | otherwise = f n ps rad x = product $ nu…

Project Euler: Problem5

素数列を作る関数は今までに何回書いたかわからん…。 import Data.List prime = p [2..] where p (x:xs) = x : p (filter (\y -> rem y x /= 0) xs) factor n = f n prime where f 1 _ = [] f n (p:ps) | rem n p == 0 = p : f (div n p) (p:ps) | otherwise…

Project Euler: Problem92

力技でなんとかなる問題って気楽でいいわー。 import Data.Char step 1 = False step 89 = True step n = step $ sum $ map ((^2) . digitToInt) $ show n main = print $ length $ filter step [1..10000000] ./a.out 49.79s user 0.45s system 99% cpu 50.…

Project Euler: Problem45

なかなか時間がかかっている…。 triangle = [n*(n+1) `div` 2| n <- [1..]] pentagonal = [n*(3*n-1) `div` 2| n <- [1..]] hexagonal = [n*(2*n-1)| n <- [1..]] loop :: [Int] -> [Int] -> [Int] -> [Int] loop (x:xs) (y:ys) (z:zs) | x == y && y == z =…

Project Euler: Problem 17

やっぱり適当なんだけど…。 strlen 1 = "one" strlen 2 = "two" strlen 3 = "three" strlen 4 = "four" strlen 5 = "five" strlen 6 = "six" strlen 7 = "seven" strlen 8 = "eight" strlen 9 = "nine" strlen 10 = "ten" strlen 11 = "eleven" strlen 12 = …

久しぶりの Haskell

そして久しぶりの Project Euler。今は単純作業なお仕事ばかりやっているのでパズルで気分転換。 isEquiv [] [] = True isEquiv (x:xs) ys | elem x ys = isEquiv xs $ filter (/=x) ys | otherwise = False isEquiv _ _ = False isOK x = let (n:ns) = map …

Project Euler: Problem 11

まわりではやっているようなので勝手に便乗。結構短くかけた。 import List nums = [[08,02,22,97,38,15,00,40,00,75,04,05,07,78,52,12,50,77,91,08] ,[49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48,04,56,62,00] ,[81,49,31,73,55,79,14,29,93,71,40,…

長さ付きリスト

id:msakaiさんが、sized-list の appendで長さ付きのリストを扱う方法を解説してくれている。すばらしい。 しかし型関数なんていうかっちょいいものがあったのかー。型関数の意味とか能力はさっぱりわからんけど、こんな風にかけてしまうとはおどろきである…

Haskell でネットワーク

Haskell でネットワークしてみよう,ということで.id:syd_syd さんの http://haskell.g.hatena.ne.jp/syd_syd/20061019/p1 とかのあたりも参考にすればいいと思う! 研究室で定期的に投げられるお知らせメールを自動化しようということで,Python,Ruby,Java…

wxHaskell

wxWidgets 2.8 と ghc6.6.1 でコンパイルに成功したという報告が. けど ghc6.6.1 が入らないので無理です….バイナリすらも動かん.VM 上の適当な Linux でやってみるか….

wxHaskell の ListCtrl

wxHaskell(core) の ListCtrl の使い方がさっぱりわからん. column が追加できないです….

terminateProcess

すいません,上記の sleep は terminateProcess で普通に止まりました.terminateProcess は Unix 環境では SIGKILL を送るらしいです. 前にやっつけようとしたプロセスはもうちょっと強引なやつだったんですな.

Haskell で外部コマンドを実行.そのあと強制終了.

久しぶりの Haskell エントリ。いつのまにか"最近言及したキーワード"のとこで Python が大きな文字になっててびつくり。 やりたいのは、 runCommand で起動した外部のコマンドを無理矢理止めること。 昔 terminateProcess でやろうとしてうまくいかなかった…

Mobility Workbench もどき

Mobility Workbench もどきを作っている。もちろん Haskell で。1日とちょいでとりあえずステップ実行まではできるようになった。 あとは structural congruence を使った簡単化とかをやれば(ステップ実行に関してだけは)本家に遜色ない。 > agent P(a,b) = …

卒論進捗

サンプルプログラムはほぼ完成。 ただ、 windowOnIdle で登録したアクション(消費者)が、なかなか実行されないという問題点が。複数のスレッドで生産者と消費者がひとつのキューを扱うのだけど、 idle イベントが発生した段階でキューにデータがないと、なか…

関数内関数を外に出すには

f a b = a where g = b f a b = a g b = b こういうふうに変形したいわけですな。 今までやってきた方法だとだめな気がしてきた…。ちょっとゆっくり考えてみよう。 f の中で g を呼んだり、その逆をやったりするとややこしくなってくる。

バグ

前に書いたコードにバグを発見した。で、ソースを読みなおしてたら明らかに無駄なことをやってたので、がっつり書き直すことにした。むむ、前書いたときは頭が寝てたんじゃないだろうか。かなりコードが短くなって、軽量化したはず。でも、他のバグが入って…