Concurrent, Clean の検索結果:

Concurrent Clean : 型クラスとクラスコンテキスト

classに付けられたクラスコンテキストと、instanceに付けられたクラスコンテキストでは意味が違う。 class Measured a v | Monoid v where measure :: a -> v という宣言は、単に、Measuredクラスに属する型は、Monoidクラスにも属していますということを言っているに過ぎない。そのため、 instance Measured Int v where measure _ = zero と書こうとしても、zero関数がコ…

Concurrent Clean : Re: 型クラスの制約

次のようにすれば、まあ、回避できるのだが、 :: Node a v class Measured e v where measure :: (e v) -> v instance Measured (Node a) v これだと、(e v)の形式に当てはまらないものをMeasuredに指定することができない。特に、 :: Node v a としてしまうと、もう不可能。 まあ、今回の用途では、この回避方法で回避できそうだけど。 - だめだった。 instance Measure…

Concurrent Clean : 抽象データ型の型変数のkind

抽象データ型の型変数のkindは、必ず「*」になるのだろうか?まあ、そうするしかないような気もするけど。 :: FingerTree v e a //| Measured (e a) v で、eのkindは「* -> * -> *」であってほしいのだけれど、「*」になってしまう。 :: FingerTree v e a = Empty | Single (e a v) | FingerTree v Node (e a v) と具体的に指定すれば、正しいkindが得られるのだけ…

Concurrent Clean : Re: Finger Trees

むー。internal overloadingエラーが取れない。そもそも、原因が分からない。 - 原因が分かった。[id:lethevert:20070807:p1]に書いた。

Concurrent Clean : 型クラスの制約

class Measured a v where measure :: a -> v instance Measured (Node v a) v みたいなのを書こうとして、instanceに型変数 v が2回出てくるためにエラーになってしまう。 って、この制約厳しすぎない? - さんざん回避方法を考えているのだけど、全然思い付かない。ぐ。。。

LLSpirit : Concurrent Clean : CleanX

[id:sshi:20070805:p1] あー。確かにCleanの紹介でCleanXで実現できる話を普通に混ぜてるのはやや反則かもしれなかったですね。 まあでも、国内のCleanユーザーの現状を考えると、Clean&CleanXを組み合わせて使っている人口の方が主流派(笑)なので・・・ 言い訳させてもらうと、Cleanのコンパイラは結構構成が単純なので、改造して遊ぶことも敷居が低い(相対的にね)し、ユーザーが少なくてこなれてないから、そういうハックをどんどんやって貢献してい…

Concurrent Clean : プログラミング言語をLinuxモデルで開発する

すでにHaskellというスタンダードがあって、GHCという強力な実装があるのに、どうしてあえてCleanなの?と思うかもしれないですが、その理由はLLSpiritの発表でも一瞬触れたように、Haskellってちょっとリソース食いすぎじゃない?と感じているわけです。 証拠 → http://www.lingr.com/room/gauche/archives/2007/07/26#msg-12539883 でも、圧倒的に実装や開発リソースで負けているCleanが、Haskel…

Concurrent Clean : newtype

Haskellにはnewtypeというものがあって、効率を損なわずに別の型を作ることができるみたいです。 http://haskell.g.hatena.ne.jp/jmk/20061203/1165141002 残念ながら、Cleanにはそのようなものはないのですが、同じ効果をレコードを使うことで実現できるかどうかということをさっきからずっと考えています。 http://sky.zero.ad.jp/~zaa54437/programming/clean/LanguageR…

Concurrent Clean : StdEnv2を作る

StdEnvの構成にいろいろ嫌気が差してきているので、StdEnv2を作るという構想を実行に移そうかと思いはじめた。

Concurrent Clean : toListとGenerics

toListをGenericsで作れないかとか考えている。 - GenReduceモジュールを使えばできるね。 って、これは、下のclass ReduceのGenerics版じゃないか。toListとreduceは表裏ということか。

Concurrent Clean : CleanX : as extension (型注釈)

型注釈を実現するas extensionを作ろう。 as {#Int} {1,2,3,4,5} と書くと、"{1,2,3,4,5}"は{#Int}型であるというように型が判定されるような。 これは、次のような変換で実現される。 as`q`2Int`a {1,2,3,4,5} as`q`2Int`a :: {#Int} -> {#Int} as`q`2Int`a a = a エスケープ処理は適当。

Concurrent Clean : FingerTree

以前からCleanの文字列処理を強化する目論見を持っているのだけれど。 CleanのStringは、Charの配列で、一意型による配列の破壊的更新とあいまって効率的に扱えるのだけれど、文字列のスライスや連結をしようとすると、必ず新しい配列が生成されるので、効率よく取り扱えない。 せっかく更新がない言語なのだから、文字列のスライスをしたときは、もとの文字列への参照を持つようにして、複製をしないようにできるはずなわけで、そのようなライブラリを作りたいと思っていた。 で、Strin…

Concurrent Clean : Re: 型のInconsistencyの回避

http://practical-scheme.net/wiliki/wiliki.cgi?Shiro http://www.jmuk.org/diary/2007/07/31/0 あー、こういうことって考えたことなかったな。なんでかな。 Cleanは対話環境がないというのもあるけれど、もともと対話環境で動作を試しながら、ちょっとずつ作っていくというスタイルではないからなんだろうな。 型チェックを頼りに、ある程度の大きさまで一気に書いてしまって、できあがってからテストをしなが…

Concurrent Clean : for-notation

完成 http://cleanoptenv.sourceforge.jp/wiki/view/CleanX/ext/for-notation/ - 時間を見て、OptEnvのモジュールの解説とかもまとめていきたい。

Concurrent Clean : for-notation

for-notationの説明を書きはじめ。まずは、基本的な構文から。 http://cleanoptenv.sourceforge.jp/wiki/view/CleanX/ext/for-notation/

Concurrent Clean : CleanXの使い方

http://cleanoptenv.sourceforge.jp/wiki/view/CleanX/usage/ CleanXの使い方などまとめはじめた。といっても、そんなに難しいことをやっているわけではないので、すぐかけるはず。

Concurrent Clean : Clean Wiki

しまった。 Concurrent Cleanという文字を入れておかないと、検索でヒットしない!

Concurrent Clean : CleanX

http://cleanoptenv.sourceforge.jp/wiki/view/install/Linux/CleanX/ CleanXのインストール方法についてまとめました。 - うーん。空白が '# 160;' で置き換わっているせいで、改行が入ってないよ。 - 修正しようとしたら、for-notationがバグっていることを発見。しかし、なんでこういう出力になるのかよくわからない。 - あー。分かった。で直した。

Concurrent Clean : Linux環境へのインストール

http://cleanoptenv.sourceforge.jp/wiki/view/install/Clean/Linux/ Linux環境へのインストール方法についてまとめた。 基本的に[id:lethevert:20070414:p1]の内容を書き直しただけ。

Concurrent Clean : CleanWiki : for-notation

CleanWikiのコードをfor notationを使って書き直してみた。 とりあえず、そこで必要とされているだけの記述力は確保した。

Concurrent Clean : for-notation : 残作業

さて、あと残っているのは タプルの分解がテキトーすぎ 例外関数がパターンマッチをミスって警告出すぎ というあたりを改善したら、完了かな - そろそろ、コードを書くのもおいておいて、作ったものを説明する文書を書いていかないとなー。CGIあたりは、あっちの方でも興味あるみたいだから、英語で書かないと。

Concurrent Clean : for-notation : ガード

ガードを使った構文で | n <= 0 = return [] という感じのと | n > 0 r <- next return [x:r] というものの2通りの書き方を考えているのだけれど、どうしたものか。 2つ目のが必須なのは分かっていて、1つ目の1行で書くという書き方をサポートするかどうかということなのだけれど。 | n <= 0 return [] でもいいかなぁ。 あと、似たようなところで、caseとかどうするかな。 - ただ、1つ目のは、 | let f = (<…

Concurrent Clean : for-notation : 途中で現れた変数に付属関数からアクセスしたい

for w f <- stdio ? True, i <- freadi fclose f return i except _ _ fclose f return -1 と書きたい時はどうしようか? - あー、こうかな? for w f <- stdio (i,f) = for f ? True, i <- freadi return i except _ _ return -1 fclose f return i

Concurrent Clean : for-notation : 行指向

ところで、今のfor-notationの実装は、とても行指向に書いているのだけれど、これってどうなんだろうな。 具体的には、ガードの | n < 0 return -1 と、付属関数の except _ _ return -1 というところで、どちらも行末を区切りとして認識している。 通常は、この区切りは「=」や「#」や「|」になるのだけれど、for-notationではそれはあまり適当ではない気がするし、だからといって特によい案がないので、改行が区切りになっているわけ。 ど…

Concurrent Clean : for-notation : forのネスト

ネストしたforもどうにかできてきた。 というか、早く寝なきゃ。

Concurrent Clean : Transputer

CleanがConcurrent Cleanだった時代のTransputer向けのコンパイラって、ダウンロードできたんだ。 http://clean.cs.ru.nl/Download/Old_Clean_Versions/old_clean_versions.html

Concurrent Clean : 有理数演算

有理数演算ライブラリは、Windows版にはExtendedArithパッケージにあるのだけれど、Linux版にはExtendedArithは付いてこないんだよな。 - 1.3のライブラリにあった。 http://clean.cs.ru.nl/Download/Download_Libraries/download_libraries.html

Concurrent Clean : Re: 小町算

[id:lethevert:20070718:p2] k.inabaさんのアプローチhttp://www.kmonos.net/wlog/75.html#_1916070718で書いてみた。 module Main2 extension for-notation import StdBase, OptEnv, StdUtil Start w # a = [1,2,3,4,5,6,7,8,9] |> number |> flatmap term |> flatmap expr …

Concurrent Clean : for-notation : except pattern

朝の時点で動くようになっていた。 先ほど、チェックインした。 - こんな感じで書ける。 Start w # (f,w) = stdio w (n,f) = for f fwrites "how many? " ? True,i <- freadi fwrites (toString ['a' \\ _ <- [1..i]]) $> newline return 1 except _ _ return -1 (_,w) = fclose f w #! w = w = (n,w)

Concurrent Clean : 小町算

一応作ってみたが、有理数演算になっていないのでだめだった。実行時間は1秒程度らしい。 module Main extension for-notation import StdBase, OptEnv import StdDebug Start w # a = problems 8 |> (\a = zip2 a $ map calc a) |> filter (\(_,x) = x == 100) |> map fst = for w f <- stdio f = f |>…