2011-01-01から1年間の記事一覧

Purely Functional Lazy IO

ほんもののプログラマや浮世プログラマ(Real World Programmer)には評判の悪い「純粋に関数的で怠惰な入出力」ですが,私のような浮世離れの怠惰プログラマにはこの上なく魅力的に見えます.リソースも実行順序も考えない世界に逃避するための仕組みをつく…

この記事はHaskell Advent Calendar 2011のために書かれたものです.

関数型言語について議論するときの用語集(未完)

プログラミング言語やプログラミングパラダイムについて議論するとき,用語の定義を共有しないと議論が噛み合わなくなります.それで以下に私が日頃関数型言語について議論したり考えたりするときに暗黙で使っている定義(ここでは厳密なものではなく,この…

BuzzFib

ナイーブ.ちょっと書き換えた.FibBuzzだとおもったら、BuzzFibというらしい。 module Main where import Data.List import System.Environment buzzfib :: [String] buzzfib = "FibBuzz" : unfoldr phi (1,1,1,tail $ cycle $ take 5 $"Buzz":repeat "") w…

tailDropWhile

複数行からなるテキストデータを処理するとき,行末の空白を除去したいときがある. rmTailSpaces :: String -> String rmTailSpaces = unlines . map chop . lines 1行分の文字列を末尾の空白を取り除いた文字列に変換する関数chopの実装を考えてみよう.素…

Haskellerのための命令プログラミング用語講座

本記事が読者として想定しているのは純粋非正格静的型付けプログラミングしかできない純粋培養ハスケラ(Haskeller)のみなさんです.だれがなんといおうとマイノリティである純粋培養ハスケラは,だれがなんといおうとマジョリティであるシャー(C er),プ…

とある使い捨てコード

module Main where main :: IO () main = interact ruby ruby :: String -> String ruby "" = "" ruby s = case break ('('==) s of (_,[]) -> s (xs,_:ys) -> "<ruby><rb>"++xs++"</rb><rp>(</rp><rt>" ++ case break (')'==) ys of (_,[]) -> error $ "invalid input: "++s (ys',_:zs) </rt></ruby>…

R(n)の列挙

冪集合 - Life Goes Onに美しいコード。リスト内包表記の使い方も素敵。

1to100penさんのヒントにより書いたもの

data List = Nil | List ::: List を使った. Python 読めないので,Pythonの解と同じかどうかは良くわからない. data List = Nil | List ::: List r :: Int -> List r 0 = Nil r n = powerset (r (n-1)) powerset :: List -> List powerset Nil = Nil ::: …

R(n)列挙

て日々(6月1日)にあった問題.すこし考えたんだけど綺麗には書けず.ぐちゃぐちゃ.Natクラスのメソッドにしたり,禁断の unsafeCoerce を使ってしまった.R(5)はちょっと長すぎるのでR(3)とR(4)を表示. ghci> pprR three "{0,{0},{{0}},{0,{0}}}" ghci> pp…

プログラムの書き方を忘れる

4月はコードを書かなかった.すっかりコードの書き方を忘れてる.orz

自然数対の整列列挙

であるようなが与えられとき,を満す自然数対をで変換したときの大きさの順にならべたリストを生成するプログラムを書け [id:route150:20110501#1304207462]に綺麗な解が.それをすこしアレンジして写経した. enumerate :: (Integral a, Ord b) => ((a,a) -…

ライフハック本を買ってしまう

いわゆるライフハック本というのを買ってしまう. 「それ前に読んだろ?」 「どんなことが書いてあったか忘れたから」 「忘れるようなハックが役に立つのか?」 「役に立つかもしれないことが書いてあったと思うんだよな」 何か問題があるという不安はまちが…

Type Family (型族)

型族って何?と聞かれたんだけど上手く説明できない.どんなときに便利なの?と聞かれたんだけどそれはHaskell WiKi読めってことで. で,まぁ無益なプログラムなら,以下のような型だけがあって実体のない(上手い表現を思いつかない)プログラムの例を書け…

割り算を使わない篩

割り算は使ってないけど,sieve のやっている比較が試し割に相当している?(変更)名前を整理 module Prime (primes,primes') where import Data.List primes :: [Integer] primes = concat primes' primes' :: [[Integer]] primes' = [2]:[3]:map fst (itera…

MacBook Air 11インチ欲しい!