RHG

本日はRHGのふつける読書会にきています。 今回のモナドからです。 以下メモ x >>= f = concatMap f xs [x] >>= f concatMap f [x] -> map [f x] [x] >>= f concatMap f [x] concat (map f [x]) [f x] -> f [(1,2)] -> []IOモナドのところで評価と実行は違う…

本日はSICP読書会

書いたソースとか (define (count-leaves tree) (fold + 0 (map (lambda (x) (if (pair? x) (count-leaves x) 1)) tree))) (define (sum seq) (fold + 0 seq)) (define (dot-product v w) (sum (map * v w))) (define (transpose mat) (fold-right (lambda (…

Clean (o)

昨日のRHGでCleanの(o)を関数として定義するとどなるかと言う話題 でやってみたんですが。モジュールトップレベルで定義すると、多重定義エラーになりました。 関数の中のwhere節で定義するとコンパイル通ります。因みに(o)はStdFuncで以下のように定義され…

Cleanでコッホ曲線

書いたよ。以下そーす Start world # testwindow = Window "TestDraw" NilLS [WindowClose (noLS closeProcess) ,WindowViewSize size ,WindowLook True (\_ _ -> example6) ,WindowViewDomain { corner1=origin,corner2=maxdomain } ] = startIO SDI Void (…

圏論勉強会の話題でHaskellでなにも考えずに 100万までのsumを求めるとHeap Errorになると言うので、Cleanでやってみた import StdEnv Start = sum [1..1000000] 結果 1784293664 で、1000万で挑戦 -2004260032 という風に符号付で表示されてしまう。…

ふつケル写経会

http://www.namaraii.com/HaskellStdy/index.cgi/tb/HaskellShakyo005

GRS

グラフ書き換え理論って必然的に"Call by name"になるの?

Scheme 100までの素数列挙

いちおう末尾再帰してるはずです… (Schemeで本当に末尾再帰してるかどうか調べるにはどうすればいいだろう?) (define (erathos upper-bound) (define (iter-erthos x xs) (define (divine? a) ((compose zero? modulo) x a)) (if (> x upper-bound) xs (if …

Hasekll

Haskellで書かれたOSらしい http://www.cse.ogi.edu/~hallgren/House/

δ簡約

Lispだとネイティブなサブルーチンまでの簡約のこと 実行と評価 print :: Show a => a -> IO () print = putStrLn . show print (putStrLn "foo") はIOをかえす 評価されると実行されるは嘘。 評価と実行は別 DClean http://dragon.ektf.hu/dclean/shelercy…

Javaのイテレータには内部イテレータと外部イテレータが存在するらしい 関数型言語という用語は1977年にバッカスがチューリング賞を取ってから言われるようになった runghc はmainを評価

Kernel読書会

先日カーネル読書会なるものにいってきました。 alternativeマクロ話だそうです。 sfence,lfenceという最近?の命令をサポートしていない、CPUのため互換性を持たせるマクロだそうです。 このsfence,lfeceというのはメモリにたいしてロード、ストアの実行…

本屋にふつハス買いに行ったがなかったので、アマゾンで注文 http://www.amazon.co.jp/exec/obidos/ASIN/4797336021/qid=1149438373/sr=1-5/ref=sr_1_10_5/250-9567274-7893807asin:4797336021

Clean パスカルの三角形

Cleanにないので、zipWithは別途定義 Start = take 10 pascal where pascal = [ [1] : [zipWith (+) [0:xs] (xs++[0]) \\ xs pascal] ] 追伸id:lethevertさんからStdLibをimportすればzipWithは使えると情報が。 ありがとうございます。

メモ

削除

Clean Parser

//モナドパーサで括弧 nestingM = (open &> nestingM (\x -> nestingM (max (x+1) y) )) yield 0 //Start = parse nestingM ['()'] "" "" //ints = (number` \i -> number` \j -> number (i,j,k,i*j*k)) //モナドパーサで足し算 ints = number \i -> symbol …

liner logic

についてお勉強しようとこの人のページにいった http://homepages.inf.ed.ac.uk/wadler/なんかdivとps形式だったのでtex関連のソフトをインストールする必要にせまられた。 cygwinsetupで簡単にptexがインストールできるアドレス 以下をsetupを起動したとき…

数字変換

//digit は型エラーでだめだった natural :: Parser Char Int a natural = ( (number)) ~temp) id) natural //ちゃんとマイナスがつく Start = parse integer ['-132423'] "" ""

括弧の照合テスト 3

foldparens f e = p where p = (open &> p p yield e

括弧の照合テスト 2

nesting = (open &> nesting nesting max (x+1) y) yield 0 Start = parse nesting ['(()(()))'] "" ""

括弧の照合テスト

Tree = Nil | Bin (Tree,Tree) open = symbol '(' close = symbol ')' parens = (open &> parens parens yield Nil

Clean Paser

ヘッダファイルの循環参照

ではまってしまった…

SOE本

高階型のところをよんでみる。 関手やfmap、Monad、StateMonad,IOMonadの話がでてくる。 昨日聞いたmzeroやMonadPlusの話が出てきたの復習にちょうどいい。

HaskellとClean

HaskellにはrunStateと言う関数があるCleanにはstartIOという関数がある どちらも合成された関数に対して実行させるために存在する。

モナドについて

IOモナドやStateモナドに関しては、評価順序を決定するため関数合成を行うための枠組み。 何でこんなことをするかと言うと、Haskellは遅延評価のため評価順序がわかりにくい。 SchemeやLispで言うとletの入れ子が連続しているのに近い。

確率

http://www.tom.sfc.keio.ac.jp/~sakai/d/tb.rb/20060519 なんというか答えそのまんまですね。 引っ掛けがあると思ったのに…

ブログペット

つけてみたけどエキセントリックなことしかいいません。

来週あたり

SICP読書会かな? まだ告知とかないけど

Clean 遅延評価が(ちょっと)便利なとき

ListLS ( map (\ (label,x) -> ButtonControl (toString $ label) [ControlPos (LeftTop ,OffsetVector {vx=x*bw,vy=0})] ) (zip2 labels [0..]) ) 無限リストを引数に取れるのでzip関数と組み合わせてこんな感じで、画面がつくれたりする。 だからどうした…