2006-03-27から1日間の記事一覧

Concurrent Clean : 副作用と一意型(4)

久しぶりに[id:lethevert:20060222:p2]の続きです。 一意型を使うアイデアとして、モナドスタイルと高階関数の2通りのスタイルを試してみましたが、だいぶ考えが整理されてきたというか、手駒が増えてきたというか。 だんだん、2種類のアプローチを融合し…

Concurrent Clean : 便利関数

[id:lethevert:20060326]の問題を解くにあたって、2つほど便利関数ができました。 (\|) infixl 1 (\|) f p :== if p f id interleave :: ![a] ![a] -> [a] interleave as bs = il1 as bs where il1 [] _ = [] il1 [a:ar] bs = [a:il2 ar bs] il2 _ [] = [] …

Concurrent Clean : ガード

下で紹介した「\|」演算子ですが、「?|」の方がいいような気がしてきた。 こんな感じ。どう? Start w # (f,w) = stdio w # f = f --> ([0..10] --> map fwritei --> flip interleave $ repeat $ fwrites "\n" ?| False --> reelU) # (ok, w) = fclose f w =…