定食屋おろポン

おろしポン酢と青ネギはかけ放題です

haskell

cabal hellから抜け出したくてあがいた話

「cabalでパッケージをインストールする際、依存の解消がイマイチでハマりがち」という噂が流れているのは知っていた。 自分が遭遇するまでは「ふーん」と右から左であった。 仔細は省略するが、このたび見事にハマり、cabal hellを目の当たりにした。 熟練H…

Ninety-Nine Haskell Problems 解いてみた

H-99: Ninety-Nine Haskell Problems - HaskellWiki 99 questions/1 to 10 - HaskellWiki とりあえず1-10問目まで。 Preludeなどのライブラリ関数になるべく依存しない縛りで解いてみた。 そのため、myLastを書くのにhead', reverse', fold', flip'を書くこ…

HaskellのHspecでテストケースぶん回したいの巻

Hspecって(使いづらいけど)楽しいよね! 特に使いづらいと思ったのがこれ。 Hspecで関数fの振る舞いを記述するとき、テストケースとして[(a1,b1),(a2,b2),...]っていうリストを渡して「f a1 `shouldBe` b1」みたいに書きたいとか思ってもモナドに阻まれて…

HaskellのnubとRubyのuniq

HaskellのData.List#nubと、 RubyのArray#uniqは、どちらもリスト/配列内の重複要素を取り除いた新しい配列を返す関数です。 どうもHaskellのnubはRubyに比べてだいぶ遅いなあと感じます。 リストと配列のデータ構造の違いに起因するのだろうと想像はできま…

バーコードのチェックサムとHaskellの練習

コンビニの商品にも、スーパーの商品にも、たいていの売り物にはバーコードがついていますね。 すだれハゲみたいなアレです。 http://ja.wikipedia.org/wiki/バーコード 日本の商品に使用されるバーコードは JANコード というもので、8桁あるいは13桁の数字…

Haskell勉強日誌 -エラなんとかの篩-

練習のため、素数判定で有名なエラなんとかの篩を実装しました。 エラなんとかの篩 13行目のx ^ 2が毎回評価されると実行速度に悪影響を与えそうですが、参照透明性のお陰で1度しか評価されていないハズですね。 reverseはコストが高い処理ですが、1回しか…

Haskell勉強日誌 -RPN電卓-

Haskellで逆ポーランド記法電卓。関数型言語らしい題材で練習してみる。 まずは普通に書いてみる。 最初は、Stackを定義してpopやpushを実装するべきかと考えたけど、強力なパターンマッチのおかげでシンプルに書けた。 単なるリストをスタックとして使用し…

ふつうのHaskell勉強日誌

ふつうのHaskellプログラミング 初版 p246 練習問題 9.6問題: 新しい型"Line"を定義し、sortLines関数でソートする Line型は`data Lines = Lines {number::Int, string::String} deriving Show`で定義されるように、行番号とテキストで構成されます。 問題で…

アリンコの問題といた

職業プログラマがFizzBuzz書けない理由 タイトル: Ants 問題文: 長さL cmの竿の上をn匹のアリが毎秒1cmのスピードで歩いています。アリが竿の端に到達すると竿の下に落ちていきます。また、竿の上は狭くてすれ違えないので、二匹のアリが出会うと、それぞれ…

Objective-CのBlocksでカリー化関数と部分適用

すごいH本を少しずつ読み進めているんだけど、なかなか進まない。iOS6の新APIの調査の方に時間を取られています*1。 5章くらいまで読んでるところだが、カリー化の説明がサラッと終わって消化不良なので、Objective-C*2で書いてみた。 multiplyThree(2)(3)(4…

Haskellの本を買ってみた

amazon:すごいHaskellたのしく学ぼう! とりあえずfizzbuzzを書いてみる。 -- ghci Prelude> [if x `mod` 15 == 0 then "fizzbuzz" else if x `mod` 3 == 0 then "fizz" else if x `mod` 5 == 0 then "buzz" else show x | x <- [1..100]] -- output ["1","2…