2006-05-01から1ヶ月間の記事一覧
削除
//モナドパーサで括弧 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 …
についてお勉強しようとこの人のページにいった 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'] "" ""
foldparens f e = p where p = (open &> p p yield e
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
ではまってしまった…
高階型のところをよんでみる。 関手やfmap、Monad、StateMonad,IOMonadの話がでてくる。 昨日聞いたmzeroやMonadPlusの話が出てきたの復習にちょうどいい。
HaskellにはrunStateと言う関数があるCleanにはstartIOという関数がある どちらも合成された関数に対して実行させるために存在する。
IOモナドやStateモナドに関しては、評価順序を決定するため関数合成を行うための枠組み。 何でこんなことをするかと言うと、Haskellは遅延評価のため評価順序がわかりにくい。 SchemeやLispで言うとletの入れ子が連続しているのに近い。
http://www.tom.sfc.keio.ac.jp/~sakai/d/tb.rb/20060519 なんというか答えそのまんまですね。 引っ掛けがあると思ったのに…
つけてみたけどエキセントリックなことしかいいません。
SICP読書会かな? まだ告知とかないけど
ListLS ( map (\ (label,x) -> ButtonControl (toString $ label) [ControlPos (LeftTop ,OffsetVector {vx=x*bw,vy=0})] ) (zip2 labels [0..]) ) 無限リストを引数に取れるのでzip関数と組み合わせてこんな感じで、画面がつくれたりする。 だからどうした…
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 われな…
以下が動かない do c hoge" writeFile "hoge" (proc c) 以下が正しい main = do h hoge" seq (length s) $ writeFile "hoge" (proc s) System.IO.Unsafe UnsafePerformIO DebugTrace Iconv Debug.Trace trace :: String -> a -> a trace string expr = unsaf…
モナドでかくとSQL do e phatntom typedo v
ある値を持つ型
>>=が乗法 mplusが加法 returnが単位元1concatMap リストMonadの法則 return x = [x] m (>==) f = concatMap f m mzero = [] mplus = (++) Monadの便利関数 guard :: (MonadPlus m) g) => Bool -> m () guard True = return () guard False = mzero sequence…
本日はRHGのHaskell読書会にきています。Haskellでのmainの型はIO型と決まってるそうです。 評価用にseqと言う関数があるそうです。いま、Maybe型に付いてその有難味を教示されています。
RHGページ http://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=RHG%C6%C9%BD%F1%B2%F1%3A%3A%C5%EC%B5%FE+Revolution%3A%3A%A4%D5%A4%C4%A4%A6%A4%CEHaskell%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0 今回説明で使われた資料 http://www.city5.…
OffsetVector を使うには Idを取得しなければならないようだ…
Start w = startIO SDI Void ini [ProcessClose closeProcess] w Windowsアプリをつくるときはっていう風にProcessAttribute で ProcessCloseを指定してあげないと閉じないみたい
ずっとcurlの事を言語ことだと思っていました… あと hatena-curl-commandを"curl.exe"にしないと動かなかった… Emacsで書けると何かと便利使い勝手はhowmに近い感じ
このまえの土曜TLUGのmeatingに行きました。 飲み会だけ。 この日は雨のためか人すくなく9人だけでした。 場所はいつものビルのつぼ八でした。久しぶりなので緊張しました。 このmeatingは日本人より外国人の方が圧倒的に多いのです。 アメリカ、ドイツ、オ…
48時間でかくScheme 本当に二日でかけた48時間かかってない。 ちなみにcall/ccは実装してない。 http://halogen.note.amherst.edu/~jdtang/scheme_in_48/tutorial/overview.html
CleanのGenericは型に対する汎用的な関数を定義するための枠組みです。 代数的な型にたいして一度定義した関数を自動的に生成することができます。 なんでGenericが必要なのか たとえば自分で定義した代数型に対して何度も同じような関数を定義するのは面倒…
http://sky.zero.ad.jp/~zaa54437/programming/clean/LanguageReport21/Chap7.html Functorは、種*->*の型構成子用の写像関数を提供している(6.4も参照)。 class Functor f where fmap :: (a -> b) (f a) -> (f b) instance Functor List where fmap :: (a…