haskell

クレオール

Problem 20 - 毛のはえたようなもの Problem 25 - 毛のはえたようなもの をみて、書きたいコードがあまりにも違って面白かったので。 Project Euler は半分弱 Haskell で解いたこともあり思いつくアルゴリズムから Haskell の香りが漂う。 100! の各桁の数字…

Haskell と Bool 環

ハスケルの不満なところ。型パラメータ。ライブラリが弱い。Bool が Num の instance でないのがありえないと思う。 instance Bool Num where (+) = (\x->if x then not else id) (*) = (&&) (-) = (+) negate = id abs = id signum = id fromInteger = even…

フィボナッチ

http://d.hatena.ne.jp/smoking186/20071205/ ねえ、きみ。それにしても、こんどの小さな事件でもわかったんだが、世の中のいざこざは、悪意や策謀から起こるというよりは、むしろ誤解や怠慢から起こるのではないだろうか。少なくとも、悪意や策謀なんて場合…

flatten

http://kmonos.net/wlog/80.html#_0950071204 無限リストの無限リストだとどうでしょう。単純にflattenしてしまうと、先頭にあったリストの要素以外は永遠に出てきません。 (snip) これだと不便なこともあります。というわけでお題。順番はどう変えてもいい…

ラマヌジャン

わたしはやはり小学時代にラマヌジャンの逸事を学んだ。ラマヌジャンは嘗て病院の中に一人の数学者と一しょになった。「1729という数字って何の変哲もないよね。」というふりに、「いやいや、二つの正整数の三乗の和で二通りに書ける最小の数だよ。」と答え…

Collatz予想

http://ll.jus.or.jp/2006/blog/doukaku2 import List; skip2 x = head x : error "invalid" : skip2 (tail x) skip3 x = head x : (skip3$tail$tail$tail x) lencollatz :: [Integer] lencollatz = 1 : (map (\(n,x,y)->1+(if even n then x else y)) (zip3…

モナド

Haskell は異質な命令型言語を内部に抱えていると理解している。たとえ副作用があるとしても「副作用をもった作用」自体はあるひとつのものとして扱える。 モナドは半群・群・環のような抽象的なもので副作用自体とは無関係ではないだろうか。モナドの言葉を…

整数問題(^^)

http://acm.pku.cn/JudgeOnline/showproblem?problem_id=2720 ようするに b i n からタワーを使って書くと (Knuth's up-arrow notation) b^^i `mod` 10^n を求めたまえ、ということ。 (^^) b 0 = 1 (^^) b i = b ^ (b ^^ (i-1)) g b i n = b^^i `mod` 10^n …

id

Haskell の ($) が id でいいじゃないかという考えがちらりとかすめた。でも、たとえば、 flip と共に使うときにはいるね。

直積

http://homepage3.nifty.com/mogami/diary/d0511.html#12t1 善とは無自覚な偽善の事である。 無能は悪い事では無い。自分が有能だと勘違いしていない限りは。 ゲーム理論で利得を計算すると妙な戦略が正しくなると実にそう思います。僕は「偽善は悪いことで…

Monad

今日は、Haskell の IOモナドが分からん、と噛み付かれた。大して分かっていない僕に聞くなよという感じだが、たぶん、いきなり IO から入るのがいけなくて、Maybe と List のモナドっぷりを味わうと、モナドという概念がとても自然に感じられるのではないか…

キップパズル

http://homepage3.nifty.com/iromono/diary/200511A.html#03 「0000から9999までの中に、どんなに四則演算しても10にできない数は ん が 個ある」 ごりごりとやるプログラムを書きましたよ。こういうのは人がやるものじゃないと思っているんでね。…

遅延評価

hGetContentsってなんで遅延評価なんだ?

境界線

length "\x10ffff" length "\x110000"

文字コード

やばい。日本語がここまで通らないことに気がつかなかった。というわけで本体を読む羽目に。 いや〜、文字コードって本当に最悪ですね。前も文字コードネタで引っかかるし(C言語だったから直せたんだけれども)。だから、日本語不便なんですよ。

前置演算子と中置演算子と

1 `(foldl (*))` [1..10] let f = foldl (*) in 1 `f` [1..10] 上がだめで下がいいのはなんかやだなと思った。

curry化

http://d.hatena.ne.jp/nuc/20050905/p4 http://d.hatena.ne.jp/notfound/20050906 ごめんなさい。説明になってませんね。Haskellerの末期症状は型が気になりすぎることと聞きました(顔。あまりに高階(1階の対義語。1階というのは関数を返さない関数)すぎる…

竹内関数

http://d.hatena.ne.jp/nuc/20050905/p3 二つ目よりも三つ目が速くなっているのは余計な遅延評価のせいで深く再帰する羽目になるからっぽいですね。strict にすることによる高速化の良い例なのかな。

IO モナド

IOに汚染されていくのは見るに耐えないと考える人もいるけれども、副作用があるものはああなるのがきわめて自然だと思うなあ。不満だったら高階のまま扱えばいいのかな。

モナド演算子を通してリストを操る lambda の夢を見た。

quine

http://www.hyuki.com/haskell/20041224094737 実行すると自分のソースを吐き出すような main=putStr$x++show x;x="main=putStr$x++show x;x=" ちなみに、 http://uguu.org/src_saitou_c.html はるろうに剣心の斉藤一の顔の絵に見えて、実はプログラム。実行…

IO monad

ファイル入出力がしたいだけ。なのに、IO monad を操ってパースしないといけないと思うと少し気がめいる。抽象化の代償。

SKI-combinator

あとは、flip2 flip3 を作ればいいのだけれども、単純作業だしいいか。

Monad

リストがモナドの一種であることを納得した。 http://d.hatena.ne.jp/nuc/20050716/p9 filter (\xs -> foldl (\x -> \y -> 10*x+y) 0 xs == sum (map (\n -> n*n*n) xs) ) $ (\xs -> [ [w,x,y,z]| wそれで上のコードを下のコードにしてみた。体感で遅くなっ…

SK-combinator

SK-combinator で遊んでみよう。 k x y = x s x y z = x z (y z) と、定義すると下のようなものが作れる。 (.) f g x = s (k s) k f g x = f(g x) ($) f x = id f x = f x flip ($) x f = s (k (s id)) k = f x flipA = s (k (s s)) (s (k k) k) a b c = b c…

一般存在定理からの帰結

F を三引数をとる curry化された関数としよう。 G x y z = F z y x の G を G = XXXXX の形で lambda を使わずに定義したい。これは flip だけでは出来ない気がする。curry uncurry も助けにはならない。さて、BG公理系では反転公理というものがあって、 順…

興味をそそらない定理

itashinさんところで下のような記述を見つけた。 http://d.hatena.ne.jp/itashin/20050714/p1 それに、美しい定理と醜い定理の対比もありましたが、自分は、醜い定理の方がずっと面白いと思いました。たとえば、「各桁の3乗を足すと元に戻るような1より大き…

>>=

H|ψ>==E|ψ> の中央のところがHaskellを想起させた。

Haskell

今日のHaskell merge (x:xs) (y:ys) | x y = y: merge (x:xs) ys hamming = 1:(merge (map (2*) hamming) (merge (map (3*) hamming) (map (5*) hamming))) 美しい。Infinite list と pattern matching のなせる華麗さ。 ところでICFPどうなったんだろう。

気持ち悪い

Haskell は気持ち悪いだとか某薊野氏は述べている。(blog では「面白そう」といっているにもかかわらずである。)さて、 Haskell は pure であるから気持ち悪くない。「人の中から出て来るもの*1」が気持ち悪くする原因であるのだから、 Haskell のコードが気…