Life Goes On

まあまあだけど楽しんでる方です

Haskell で RealTimeQueue

@autotaker1984 さんの以下の記事について考えました。永続リアルタイムキューのHaskell実装と計算量解析 - autotaker's bloghead / tail するときに、reverse さえ完了していれば問題ない、だから snoc で停止計算を進行させる必要はない、というのはなんと…

世界一短い自己紹介

R 教授による S 大学での講義録。 はじめに かねてから話していたとおり、今回はクワインについて講義する。 そもそもクワインとは何か?自分自身と同一の文字列を出力するプログラムのことである。自己言及のパラドックスに絡めて語られることもあるが、あ…

Hello, world! ふたたび

R 教授による S 大学での講義録。 はじめに えー、前回の講義からだいぶ間が空いてしまったが、講義を始めたい。 今回はクワインについて話す予定であったが、その前にもう一度だけ Hello, world! について話をさせてほしい。 前回の講義の直後、irori 氏に…

究極の関数型言語による至高のHello, world!

以下の記事は、 R 教授による S 大学での講義録を Haskell Advent Calendar 2012 のために転載したものである。 はじめに えー、それでは、今年最後の授業を始めたいと思う。今日は『究極の関数型言語による至高の Hello, world!』について講義することにし…

Haskell vs F# その後

mkotha さんに直してもらったりして、Haskellのコードはだいぶ速くなりました。どうも2重ループの内側がボトルネックのようなので、そこを展開して、データ構造も変えて、UNPACKプラグマは効くので残して、正格評価を1ヶ所だけ。性能と可読性のバランスが…

Haskell vs F#

VB .NET で書かれたプログラムを速くしろと言われて、Haskell と F# で書き換えたりしています。僕の目論見ではHaskellの方が速くなるはずで、そしたら『F# もいい言語ですけどね、やはり速度を求めるならネイティブ・アプリケーションでないと。』とか何と…

冪集合

2011-06-08にあったお題に挑戦。 まずはごくごく素直に。nobsunがなぜNatとか定義しているのか、よく分かっていません。 data Set = S [Set] instance Show Set where show (S xs) | null xs = "0" | otherwise = "{" ++ drop 2 (concat [", " ++ show x | x …

Function call expression 参戦記

公私ともにバタバタしていて、blog も twitter も放置していますが、どうにか生きてます。 anarchy golf - Function call expression に関して、youzさんが解説を書けと言ってるので、2位という立場で僭越ながら書いてみる。 2週間前に問題を見て、なんて…

ポケットキューブ(2×2×2キューブ)の最短手数

ルービックキューブを揃えるための最短手数は最大でも20手だそうです。3×3×3を解くには相当なリソースが必要ですが、2×2×2なら何とかなるんじゃないかと思い、プログラムを組んでみました。 結果は↓の通りで最大で11手でした。これくらい誰か既に計算してそ…

Haskellと確率と限定継続

会社の勉強会で、Haskell による確率プログラミングについて話しました。 元ネタは Oleg さんの論文(Probabilistic Programming)です。OCaml で書かれていたプログラムを Haskell に翻訳しながら解説しました。もともとの論文の主張は、木探索として定義し…

Google Code Jam 2010 - Qualification Round

今年も参加してます。予選だしあまり言うこともないのですが、せっかくなのでコードを晒しときます。 去年のコードと比べると、ゴルフの影響を受けすぎ(悪い意味で)。もうちょっと可読性を大事にする人間だったはずなのですが・・・。 ともあれ Haskell で…

Haskellers Meeting 2010 Spring

行ってきました。 Haskell の神さまにたくさん会いました。 サインももらいました。オレオレ関数型言語を実装したいって言ったら、『今はこういう実装じゃないけど最初に読むにはいい本だよ』みたいなことを言って、↓のメッセージを書いてくれました。 家宝…

Haskell(GHC)でのプロファイルのとりかた

いつも忘れて、その度にぐぐってるので、メモ。 コンパイル時に -prof -auto-all オプションをつける ghc --make -prof -auto-all hoge.hs実行時に、+RTS -p オプションをつけて、出力される 〜.prof ファイルを読む ./hoge.exe +RTS -p -RTS特定の式のコス…

SPOJ の時間制限が厳しい件について

Lost Dog さんの記事が面白そうだったのと、あなごるのサーバが落ちてて何もできなかったのとで、SPOJ に初挑戦。 https://www.spoj.pl/problems/TRT/ 問題は Problem 67 - Project Euler に近いと思います。O(n2) の DP(?)で解きました。 ただ、何も工夫…

鳥たちと戯れる

To Mock a Mockingbird を読んでいます。言わずと知れたコンビネータ論理の教科書(?)です。 そこで算術や論理を関数で表すという、ラムダ計算でよくある話が登場するのですが、自然数の定義が一般的なチャーチ数と違っていて分かりにくかったので、検算用…

BFS

「人材獲得作戦・4 試験問題ほか」を解こうとしている(続・未完) - IKB: 雑記帖 について、コメント欄に書こうと思ったのですが、長くなったのでこちらに。 この場合、遅延評価云々はあまり関係なくて、元エントリのコードでも解が一つ見つかった時点です…

リストも関数も同じもの

注:この文章は Haskell 布教のため、 Haskell を知らない人向けに書いています。なので、ちょっとでも分かりにくいところはどんどん指摘してください。しばらく前に、hasekll-jp のメーリングリストで Haskell の型クラスの体系が話題になっていたのですが…

素因数分解

inamori さんが Project Euler の解説記事で素因数分解について触れているのですが、そこで「あまりHaskellっぽくない」と書いてあるのが、気になってしまいました。 Haskell っぽいコードってどんなだろう、やっぱり自前で再帰せずに高階関数を使うのかな、…

詳細設計書

ネタ元:詳しすぎる詳細設計書 - SiroKuro Page 自分だったらこんな風に書きたかったりするので、やっぱりまだ詳細設計書が邪魔だと思いました。:p あ、詳細設計書なんて要らんだろ、という話には激しく同意です。 import Control.Arrow import Data.List da…

if を追放する

Kコンビネータと真偽値に関する話題が挙がっていたので、それを使って何か書いてみようと思いました。 条件分岐と言えば FizzBuzz。以下のようなプログラムを考えます。 main = mapM putStrLn [ max (show n) $ fizz n ++ buzz n | n <- [1..100] ] fizz n =…

速い素数の求め方

ちょっと前に haskell-cafe で速い素数の求め方が話題になっていました。 どんなもんだか確認した結果を記録。 僕がよく使ってたコードはこんな感じ。改めて見るとツッコミどころ満載です。 106 番目の素数を求めるのに手元のマシンで 2 分以上かかります。 …

Turing Machine

anarchy golf - Turing Machine にハマりました。 最終的に通したコードはこんな感じ。空白を削って 168B です。 main = interact $ f "" 0 2 . map words . lines f s i j m | j<2 = s | 0<1 = f (take i s ++ a : drop(i+1)s) (max i 0 + b%61) (c%63) m w…

S コンビネータいろいろ

上のエントリでのプチ収穫。 モナドとコンビネータ論理のコラボ!とか喜んでたら、既に先達が。 [Haskell-cafe] Point-free style 【オブジェクト倶楽部: 2008-33号】 import Control.Monad.Reader s = flip (>>=) . flip k = return そういえばArrowでも書…

Reader モナドは引数隠蔽モナド

以前にもエントリを書きましたが、Readerモナドがさっぱり分からないので、もう一度勉強してみました。 あまり深く考えずに Reader a を a -> と読み替えると、関数の型は以下のようになります。 関数 型 等価な関数 (>>=) (a->b) -> (b->a->c) -> a -> c (=…

Problem 256 を 紹介する - 落書き、時々落学 Problem 256 - Project Euler面白そう! でも僕は 253問目 が解けず、止まったままです。皆さん代わりに解いてください。

squill

squill というDBアクセスのための DSL があります。 https://squill.dev.java.net/ ざっと触ってみたのですが、Tupleクラスとか用意されていて、似たようなO/Rマッパーと比べてもなかなかよくできている感じ。 Javaでここまでできれば十分だと思うのですが、…

HaskellDB

HaskellDBを触っています。 基本が射影と制限と直積(関係代数 - Wikipedia)で、INNER JOIN ましてや OUTER JOIN なんて完全に無視してるところとか、NULL可の列とNULL不可の列をそのままでは比較できないところとか、とにかく理論派です。現場の都合なんて考…

LINQテクノロジ入門

LINQテクノロジ入門 MS VS2008による新たなクエリ構築技法 (マイクロソフトコンサルティングサービステクニカルリファレンスシリーズ)作者: 赤間信幸出版社/メーカー: 日経BP社発売日: 2008/07/24メディア: 単行本購入: 2人 クリック: 43回この商品を含むブ…

Google Code Jam Round 1B

Dashboard - Round 1B 2009 - Google Code Jam 終わりました。 A と B の Small と Large をそれぞれ通して 56 点。とりあえず先には進めるようですが、860位というイマイチな成績でした。 今回は C が難しくて上位陣でも解いている人は少なかったので、点数…

傾向と対策

先週から、Google Code Jam に参加してます。 まずは今さらながら Qualification Round を振り返り。 聞いていた通り問題は難しくなかったです。時間も丸一日あったし。 個人的な課題は何といってもスピード。簡単な問題を一つ解くのに2時間以上かかってい…