2006-04-01から1ヶ月間の記事一覧

Concurrent Clean : 大域脱出2

tryという関数を作ってみた。 ::Try a b = Break a | Continue b try f g x :== case f x of Break a = a Continue b = g b Start w = w --> stdio --> \(f,w) = ([],f,w) --> try check \(f,w) = f --> fwrites "hello world" --> flip fclose w --> \(ok,w…

CSS

はてなのCSSの構造がいきなり変わって、記事が突然読めなくなってあせった。

Concurrent Clean : 流れ指向と無名関数

無名関数を使ったときに、レイアウトを深くする必要がないことに気づいた。 ということで、途中で変数束縛を入れたくなったら、こんな風に書けばよいことで結論。 Start w = w --> stdio --> \(f,w) = f --> fwrites "hello world\n" --> flip fclose w --> …

Concurrent Clean : 文字列の一意性型属性

id:sshiさんの指摘が気になって、あれこれ試してみたら、全然共有できるんですけど。 たとえば、こんな感じ。 Start w = w --> stdio --> \(f,w) = f --> fwrites "input >" --> freadline --> \(line, f) = f --> fwrites $ reverseStr line --> if (line =…

ところで、Haskell

にもtrace関数はあるよ。

Concurrent Clean : 関数の返値に付加された一意性型属性 : Clean入門

次のプログラムは、コンパイルが通ってしまいました。 Start w # (_,f,w) = fopen "num.txt" FReadText w (s1,_) = sfreads f 3 (s2,_) = sfreads f 5 (c,w) = stdio w c = c <<< s1 <<< " and " <<< s2 <<< "\n" (_,w) = fclose c w = wでも、これは通らな…

Concurrent Clean : Clean入門

http://www.geocities.jp/lethevert/softwares/clean/gettingStarted01.html 先の修正を含めて、いくつか校正をいれて、更新しました。

Concurrent Clean : ここです

Start :: [Int] Start = takeWhile ((>) 1000) [x^3 \\ x <- [1..]]しかし、以下のように書かないよう気を付けて欲しい。 Start :: [Int] Start = [x^3 \\ x <- [1..] | x^3 < 1000]これは以下のものと同等である。 Start :: [Int] Start = filter ((>) 1000…

Concurrent Clean : 大域脱出

流れの中に、どうやって大域脱出を埋め込むかというのが問題。 これを上手く組み込んだ解の一つがモナドなのだが・・・

Concurrent Clean : Clean入門(20) : ファイル入出力

http://www.geocities.jp/lethevert/softwares/clean/gettingStarted20.html 「(20)ファイル入出力」を書きました。 このページは、シンプルに関数の使い方の説明です。 Haskellのモナドを使う方法より、直感的に理解しやすいかもしれません。評価戦略とかを…

Algol60 : たらいまわし関数

見つけた。 http://www.csse.monash.edu.au/~lloyd/tildeProgLang/Algol60/ DLしてすぐにサンプルも動いたので、これであれをやってみる。 - やってみました。 'begin' 'integer' r; 'integer' 'procedure' tarai(x,y,z); 'value' x,y,z; 'integer' x,y,z; '…

Haskell本

作者の方、出版社の方、これほど普通のプログラマに売れるなんて想定していなかったんじゃないでしょうか? 想像するに、想定読者が、多少は関数型を知っている人くらい(たとえばSchemeないしOCamlは知ってるけど、Haskellは知らないぞとか)になっているの…

Concurrent Clean : Clean入門

この先の構成。あと4ページ。一意配列と一意性の伝播は触れないことにしました。 環境構築 プロジェクト 基本データ型 基本関数 関数の作成 ローカルスコープ 高階関数 クロージャ・カリー化 無名関数 演算子 内包表記 多相性・型クラス 型推論 評価戦略 正…

Concurrent Clean : share file

share fileといっても、プロセス間共有するという話ではない。 Cleanでファイルを取り扱うときは、通常、一意性型属性付きで取り扱うのだが、一意性型属性なしで取り扱うこともできるのだ。ただし、読取専用で、一度オープンするとクローズする方法はない。…

Concurrent Clean : freadi バグってやがる・・・

(ok,n,f) = freadi f成功しても、「ok = false」になるみたい。

Concurrent Clean : たらいまわし関数

なんか、非正格言語であるのに、これを書いておかないのはまずい気がしてきた。といっても、Haskellとほとんど(全く?)同じなので、面白くも何ともないのだが。 module Main import StdEnv Start = tarai 768 340 0 tarai x y z | x <= y = y = tarai (tar…

Concurrent Clean : Clean入門(18) : 定グラフ

http://www.geocities.jp/lethevert/softwares/clean/gettingStarted18.html 「(18)定グラフ」を書きました。 効率性の話と、一意性のところで必要になる代入スタイルの説明と、データ構造をパターンマッチで束縛する方法の説明です。 ちょっと一休みという…

ALGOL68 : たらいまわし関数

そういえば、ALGOLは遅延言語だったっけ、ということで、ALGOLでたらいまわし関数を書いてみる。 Algol 68のインタプリタを見つけたので、それを使ってみることに。 http://www.xs4all.nl/~jmvdveer/algol68g-mk8.1/doc/introduction.html PROC tarai = (INT…

Delphi : 気持ち悪いコーディングスタイル

procedure Tarai (x: Integer; y: Integer; z: Integer): Integer; begin if x 最近は、これが自然に見えるようになってきた。

Concurrent Clean : Clean入門(19) : 副作用と一意性

http://www.geocities.jp/lethevert/softwares/clean/gettingStarted19.html 続いて、「(19)副作用と一意性」を書きました。 混乱しがちな、一意性と正格性の関係を多少説明したつもりです。

Concurrent Clean : imperative Clean

let-before式の書き方を工夫すると、いかにも命令的なスタイルのプログラミングになるという例。 Start :: *World -> *World Start w # (f,w) = stdio w f = fwrites "Hello World!" f (ok,w) = fclose f w = w

日本語の日記に英語のコメントがついている例

[id:wata_d:20051215:1134633660]

目覚ましをかけない健康法

[id:propella:20060407:p1] つい最近から、それができない規則になってしまいました。_| ̄|○

ミドルグラウンド!!

なんか、素敵過ぎる議論が展開されていますね。特にid:sumiiさん、お疲れ様です。 ところで、 ただ、このミドルグラウンドにコミットする人が増えてくれたらなと思います。たぶん論文を書くチャンスはほとんど無いし、「言語処理系を売って行く」というビジ…

そういえば、ALGOL60って

非正格言語だね。だって、Call-by-nameでしょ。 Delphiの祖先みたいな印象だったけど、かなり見方が変わったかも。

shiroさんが

言いたいことをずばずば言ってくれているので、私には継ぐ言葉はありません。ただ、ひたすらCleanで遊ぶことを考えるのみです。

舌の根もかわかないうちから

ところで、先日のオブジェクト指向に否定的な記事を書いたそばから、Cleanとオブジェクト指向の関係をまた考えているのですが、それはこのBlogの仕様ですから気にしないであげてください。このBlogは、そのとき、その瞬間に考えていることの記録の集合ですか…

Concurrent Clean : オブジェクト指向

相変わらずオブジェクト指向。それにしても、この言葉の使いにくさ。意味範囲が広すぎて、焦点としている概念にうまく焦点をあてられない。それとも、私の語彙が少ないからなのか? 今回考えるのは、カプセル化(あるいはモジュール化というほうが一般的なの…

Java : コンストラクタで例外

Javaで、コンストラクタで例外が発生したらどうなるのか、という疑問。たとえば、次のコードを考える。 Object obj = null try{ obj = new ExceptionalObject(); //例外発生 }catch(Exception e){} if (obj == null) { System.out.println("null"); }else{ S…

Java : JITとjavac

[id:w_o:20060403:p7]の話だけど、むしろこれは初めからそういうものかと思っていた。