日下部のチラシの裏 このページをアンテナに追加 RSSフィード

2006-05-21

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


	         ListLS ( map (\ (label,x) -> ButtonControl  (toString $ label) 
	                                  [ControlPos (LeftTop ,OffsetVector {vx=x*bw,vy=0})]
	                       )
	                       (zip2 labels [0..])  )

無限リスト引数に取れるのでzip関数と組み合わせてこんな感じで、画面がつくれたりする。

だからどうしたと言う感じだが…

CleanのWindowのコントロールについてはここら辺参照

http://sky.zero.ad.jp/~zaa54437/programming/clean/ObjectIOLibrary12/Chap7.html

Sum

http://sicp.g.hatena.ne.jp/hyuki/20060521

を読んで浮かんだ解をCleanで書いてみる

Start =  sumCol [ [1,2,3],[4,5,6],[7,8,9] ]
sumCol xss = map sum
                 (map (\ n -> (map (index n)    xss)) 
                      (indexList xss) )
where
	index n xs = (flip (!!) n) xs

われながら汚いとおもう。

その後url先の解を見てapplyって便利だなぁと思った

追記

というよりもSchemeのmapの動作がああいう動作だからか…

indexListつかえば上の

	         ListLS ( map (\ (label,x) -> ButtonControl  (toString $ label) 
	                                  [ControlPos (LeftTop ,OffsetVector {vx=x*bw,vy=0})]
	                       )
	                       (zip2 labels [0..])  )

は以下に書き直せるなぁ。無限リスト使う必要もなかった…

	         ListLS ( map (\ (label,x) -> ButtonControl  (toString $ label) 
	                                  [ControlPos (LeftTop ,OffsetVector {vx=x*bw,vy=0})]
	                       )
	                       (zip2 labels (indexList labels))  )

来週あたり

SICP読書会かな?

まだ告知とかないけど

ブログペット

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

確率

http://www.tom.sfc.keio.ac.jp/~sakai/d/tb.rb/20060519

なんというか答えそのまんまですね。

引っ掛けがあると思ったのに…

モナドについて

IOモナドStateモナドに関しては、評価順序を決定するため関数合成を行うための枠組み。

何でこんなことをするかと言うと、Haskellは遅延評価のため評価順序がわかりにくい。

SchemeLispで言うとletの入れ子が連続しているのに近い。

HaskellClean

HaskellにはrunStateと言う関数があるCleanにはstartIOという関数がある

どちらも合成された関数に対して実行させるために存在する。

SOE本

高階型のところをよんでみる。

関手やfmap、Monad、StateMonad,IOMonadの話がでてくる。

昨日聞いたmzeroやMonadPlusの話が出てきたの復習にちょうどいい。

kusakabeyoujiさんのリング一覧

2005 | 03 | 04 | 08 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 09 |