Haskell

再帰理論

こちらもただのお遊びです。 今回はHaskellを選びました。 -- 後者関数は原始再帰関数 suc = (1 +) -- 射影関数は原始再帰関数 u1_1 x = x u3_1 (x, _, _) = x u3_2 (_, x, _) = x u2_1 (x, _) = x u2_2 (_, x) = x -- 加算関数 x +. 0 = u1_1 x x +. (y + 1…

カンスウノカタ

OCaml/F#を書いててHaskellを羨ましく思う点のひとつに、関数の型指定の書式があります。 こんなやつ↓ Foo :: Int -> Int -> String Foo x y = (ry 綺麗でいいなぁ、といつも感じていました。 仕様拡張でF#にもそんな書き方登場しないかな・・・なんて叶わぬ…

Workflowでモナド

seqやasyncの正体はWorkflowというもののようだ。 正確にはComputation Expressionsというのかな?(なんて訳すとカッコいいんでしょう。) CPS変換のシンタックスシュガーみたいだけど、なんとなくモナドに似た感じもある。 最近F#の勉強がおろそかになって…

F#でArrow

練習中のF#(OCaml)でHaskellのArrow, ArrowChoice, ArrowApply, ArrowLoop を書いてみました。 突っ込みやアドバイス歓迎です。 ちなみにOCamlは空き時間などに携帯でWebサイトを見て勉強した(?)だけなので実はあまり自信が無い。。。(多少はPCでも書い…

だから論理論理 切なくて 壊れそうな夜にさえ

Haskellの演算子の定義には色々な記号が使える。ので試してみた。 Unicodeに携帯の絵文字が追加されたらとても楽しいことになりそうですね! さて、知ってる人にとっては結構当たり前(?)だけど、案外気付いていない人が多い気がする、XORとnot equalの関…

LazyなFibonacci

10/11に第4回北海道関数型言語勉強会が開かれました。

長いブランクがありましたが(汗)、最近数理論理学の勉強を再開。(少しずつしかやってないけど・・・) これまで読んでいた本は命題論理しか扱ってなかったのですが、今読んでる本は述語論理と集合論も取り扱ってるので初対面の彼らにやや苦戦中。理解力の…

quick sort

http://d.hatena.ne.jp/uskz/20080918/p2 久しぶりにHaskellのqsortを見た。 最初は http://d.hatena.ne.jp/Nobuhisa/20070826/1188075244#c1188200644 で同じく梶本さんに教えていただいたり。(もう1年も経つのか・・・!) 当時は全く意味不明の文字列に…

ちゃんと回ってる?

26日にFunctional道産子の集い(北海道関数型言語勉強会-3 in 札幌)に参加してきました。 一応Haskellのお勉強をしてるんですが、気付けばRubyだのC++だのBinary Hacksだの(一部PythonだのC#だの)で盛り上がってました。面白かったなぁ。まあこれが勉強会…

まわしまわされ

今週も(今日も)やってまいりました現実逃避のお時間です。 Haskellの本を読んでいたら遅延評価と竹内(様)関数のことが書かれていた。 なるほどー。 とか言いながら読んだのは結構前なのですが、今日ようやく手を動かしてみました。

Y

めもめも 不動点演算子がControl.Monad.Fixにあったうりゃ import Control.Monad.Fix main = do print $ map (fix $ \f x -> if x == 0 then 1 else x * f (x - 1)) [0..] http://d.hatena.ne.jp/uskz/20080716/p5 へー。ちょっと自分でも書いてみよんよん。…

mapとfilterとリスト内包

PHP Array ( [0] => 1 [1] => 2 [2] => 4 [3] => 8 [4] => 16 [5] => 32 [6] => 64 [7] => 128 …

lambda

Haskellではλ式をこう書くんですね。 Prelude> (\ x y -> x ** y) 2 10 1024.0 GHCiでは関数を定義できないけどラムダ式ならOKか。 Prelude> let c = (\ x y -> x ++ reverse y) "hello, " Prelude> c "dlrow" "hello, world" Prelude> (\ x -> (\ y -> x + …

畳み込み - fold(l|r), reduce

RubyとPythonの場合 http://d.hatena.ne.jp/nullpobug/20080609/1212994658 Haskellだとfoldl(fold-left)とfoldr(fold-right)らしい。 定義を拾ってきた -- fold-left foldl :: (a -> b -> a) -> a -> [b] -> a foldl f z [] = z foldl f z (x:xs) = foldl f…

北海道関数型言語勉強会@札幌#2

id:mrknセンセーとジクンさん主催の北海道関数型言語勉強会@札幌#2に参加してきました。 この時期にしてレポートがひとつも出来ていないので(!)止むを得ず欠席しようと思っていたのですが、レポートどうにでもなりやがれ精神が湧き上がってきて、結局行く…

クロージャ

ふつけるの4章に、関数内で関数を定義する方法があったのでクロージャを作ってみよう。 closure :: Int -> (Int -> Int) closure x = fn where fn :: Int -> Int fn y = x + y main = do let f = closure 95 print $ f 5 うまく行きました。 しかしながら、…

はじめました

やっとこさインストールしたべさ。 勉強会で使う某Haskell本読んで少し書いてみた。 main = do cs <- getContents putStr cs main = do cs <- getContents print $ length $ lines cs LeksahというIDEがあるみたいだけど、まだ当分テキストエディタでいいや…