Clean

純粋関数型言語のfoldlで副作用を起こす

http://d.hatena.ne.jp/i_k_b/20120215/1329320486に触発されてCleanでも書いてみました。 module foldout import StdEnv // 出力する関数 (Fileは一意でなければならない) // class (<<<) infixl a :: !*File !a -> *File msg :== ["hello,", " uniqueness"…

Clean2.4 is available for Windows, Linux and MacOSX!

Clean2.4がリリースされました!>http://wiki.clean.cs.ru.nl/Download_Clean まさか本当に(MLで言ってた通り) *近々* リリースされるとは. Rinusさんごめんなさいm(_ _)m (まぁ, MLで言ってたようなマルチコア対応とかDynamicのバックエンドを拡張するとか…

スタートClean、終わりました

開催が危ぶまれていた(?)スタートCleanですが, 無事, スタートとは名ばかりのウルトラなメンツでCleanを始めました! > togetterでのまとめはじめに主催者のoskimuraさんが, 主にHaskellとの違いからClean概説を発表. 途中, 事あるごとに話を振られましたが…

この夏、Cleanを始めよう!

スタートClean (ハッシュタグ #start_clean)が慎ましくも始まりそうですしとりあえずHelloWorld書いておきます. (最近触って無くて自分が忘れていたので…) Clean最新版をダウンロードしますhttp://wiki.clean.cs.ru.nl/Clean おもむろにCleanIDEを起動します…

iTask版Cleanの機能

あけましておめでとうございます. 今年もよろしくお願いします.新年一発目からCleanネタで行きます. 昨年末にリリースされたClean2.3ですが, 前バージョンの2.2以外にも, 以前からiTaskというワークフロー記述システム*1の最新版専用に用意されたバージョン…

Clean2.3 Release!

Clean2.3 Releaseされました! 最近Wikiの変更とか活発だったから期待せずに見守っていたわけですが, まさかのリリース来ましたね.当然ですがCHANGELOGとかNEWFEATUREとかBUGFIXみたいな軟弱な記述はどこにも*1有りません. …と思ったけど翌日にメーリングリ…

SMLのLazyリストプチ改良

以前作ったSMLの遅延リストのコンストラクタを, デフォルトの正格リストに合わせました. これで組み込み(というかtoplevel)で用意されているリストと同じように使用できると思っていた時期が私にもありましたorz datatype 'a inflist = nil | ::: of 'a * 'a…

なんでも比較出来たよー −> ザ・車輪 −> /(^o^)\

コンストラクタを幾つも持つデータ型を比較したくなった. 例えばこんなの. :: Data = ABC | DEF | GHI | JKL | MNO これを真面目にOrdクラスに入れようとすると, 延々とコンストラクタの組み合わせを列挙して大小関係(?)を定義する必要があるです. instance …

genericOnを作ろうとして失敗した

Haskell には Data.Function に on という関数が用意されている. C++ にも on が欲しい - EAGLE 雑記 を見てonという関数を知りました.定義は簡単なのでCleanでも普通に書けます. on f g = \x y = f (g x) (g y) まんまですね. gOnの実装 これを見て,引数の…

Cleanの文字列型は微妙

Cleanの文字列は[Char]じゃなく{#Char}という型になっているため,通常のリストとして扱えません. 配列は動的に長さが変えられないので,前回のエントリのような,シーケンスを頻繁に切り貼りしたいケースだと不便です. 内包表記は使用できますが,(リストのよう…

Cleanでfizzbuzz

なぜか思いついてやってみた. またも無意味にマイブームのfoldを使用. Cleanの文字列はどうにかして欲しいなぁ. 他の人はどう折り合いを付けているんだろうか….*1 module fizzbuzz import StdEnv fb = foldr f "" where f y ys = (p y) +++. "\n" +++. ys p …

Cleanでfarey数列

farey数列の記事を見かけたのでCleanで書いてみた. 流石Clean!!コードが短いぜ! module farey import StdEnv import Rational import BigInt farey 1 = [(0/:1),(1/:1)] farey n = foldr f [] (farey (n-1)) where f x [] = [x] f x [y:ys] = let m = (nu…

Fusion Property of fold

foldつづき. Fusion Property 以下の形の等式を考えます. h o fold g w = fold f v これは一般に成り立つわけではありませんが、 成り立つ場合にはUniversal Propertyによって次のような表現と同等であると言えます. (h o fold g w) [] = v (h o fold g w) (x…

Universal Property of fold

foldにはパッと見では分からない便利な特性を持っています. その中でも(多分)かなり基本的な部類の性質を紹介します. (注意1) 記事中でのfoldは全てfold-rightです. (注意2) (o)は(.)です(点だと見づらいので) 一応foldの定義 fold f v [] = v fold f v (x:x…

Exported Concept Maps vs TypeClass

はじめてデフォルト実装が記述できることを知りました.ConceptGCCで対応してたかな? でそれをさらに便利にする提案. commitee documents Exported Concept Map conceptで提供するデフォルト実装を暗黙で提供する話. concept LessThanComparable< typename T…