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

OCaml

私はOCaml使いではないのですが、昔、Cleanにたどり着く前にちょっと触ったときの覚え書きがGoogleの検索上位に来てるんですね。特に google:ocaml インストール google:ocaml gui だと、トップに来てました。 いや、そんな大したこと書いてないし、というか…

オブジェクト指向と副作用

[id:lethevert:20060329:p1]の続きになるわけですが、オブジェクト指向だから副作用が増えるというわけではないということは留意しておくべきかもしれません。今までも、そんなことは書いたことはなかったと思いますが、そうではないということも書いていな…

枯れた技術?

COBOLを書いていて思ったのだけれど、古い技術を「枯れた技術」といってありがたがる人がいるけど、あれってどういう思考なんでしょうね。古ければいいってわけでもないみたいですし。 新しい技術が開発されるのは、それによって解決しようとしている問題が…

Concurrent Clean : Clean入門(16) : 正格データ構造

http://www.geocities.jp/lethevert/softwares/clean/gettingStarted16.html 「(16)正格データ構造」を書きました。 こうやって改めて確認すると、Cleanは効率性というものに対して、非常に注意を払っている言語だということに驚かされます。Haskellの文字列…

Concurrent Clean : Clean入門

この先の構成の予定を少し変更したので、メモしておく。 マクロの説明がなかなか面白いものになる予定。 環境構築 プロジェクト 基本データ型 基本関数 関数の作成 ローカルスコープ 高階関数 クロージャ・カリー化 無名関数 演算子 内包表記 多相性・型クラ…

Concurrent Clean : ObjectIO

Cleanをはじめた頃に、ちょっとやって挫折して、そのままほったらかしにしてあったObjectIOをすこし触ってみた。というのは、Clean入門の一意性のところを書くにあたって、GUIアプリケーションのことを無視しておくわけにはいかないと思ったからだ。といって…

Concurrent Clean : Linear Logic

そういえば、Cleanの一意性は、Linear Logicと関連があるんでした。すっかり忘れてました。 http://www.nerimadors.or.jp/~kando/TITECH/Monad/Monad.html#_Toc458212904 Linear Logicに関しては、Phlip Walderさんの論文が参考になると、池田さんのリンク集…

id:higeponさんの例の質問

関数型言語(プログラミング言語Scheme, Haskellなど)を勉強しようと思っています。 初心者にも関数型言語のメリットや考えかたがスラスラ分かる勉強の材料を教えてください。 言語の習得よりも、関数型言語の考え方の習得に重きを置いています。 例えば - …

Concurrent Clean : ObjectIO

startIOやopenDialogなどの第2引数で内部状態の初期値を与えるみたいです。 で、いろいろなところに出現する"PSt .l -> PSt .l"型の関数の"PSt .l"型の引数からその内部状態を取り出すことができます。たとえば、次のように。 Start :: *World -> *World St…

純粋関数型とオブジェクト指向

[id:lethevert:20060328:p3]の続き。 純粋関数型とオブジェクト指向がどのようなプログラミングの違いをもたらすかについて、簡単な例を挙げて考えてみます。 例題 工場(Factory)のプログラムで表現します。 工場は、資材(input)を受け入れ(accept)た後、「…

Concurrent Clean : アキュームレータ

[id:sumim:20060327:p1]のコメント欄で、代入の件で勘違いした件について、そういう時は、Cleanはどう書くのかを考えてみました。 Start w = w --> stdio --> \(f,w) = f --> printAc 1 --> flip fclose w --> snd printAc n f = f --> (n --> (+) 2 --> (+)…

http://www.cs.ru.nl/にアクセスできない件

プロバイダに問い合わせて、いろいろやりとりしていたのだが、「IPアドレスを直接入力してもアクセスできない」と何回も説明しているのに「DNSサーバーに異常はありませんでした」みたいな回答が返ってくる_| ̄|○ プロバイダなんだから、障害受付の担当者に…

純粋関数型とオブジェクト指向

純粋関数型とオブジェクト指向はやっぱダメなんじゃないかと思うこの頃です。オブジェクト指向をなんと解釈するかによってなんとでもなるので、かみ合った議論がしにくいですが。 こう考えるのは、SICPの影響だと思うのですが、純粋関数型とオブジェクト指向…

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 =…

quiz : 解答編 : Concurrent Clean : ソースコード

出力は、最終結果だけでなく、計算過程も出力するようにしています。

quiz : 解答編 : Concurrent Clean : 思考の軌跡

まず、最初にトライしたのは「incremental」な手法でした。 2頂点までは自明なグラフになるので、最初の2頂点をそのように決め、そこから先は頂点を1つずつ増やしていくという方向で頂点を追加するときのグラフの変換パターンを探したのですが・・・ グラ…

quiz : 解答編 : Concurrent Clean : アルゴリズム

[id:lethevert:20060324:p2]のクイズの解答編です。(というか、ただ、私が解けただけなのですが) もし、まだ考えている方がいたら(いないと思いますけど)、ネタばれ注意です。

Concurrent Clean : 遅延評価だと計算コストを無視できるのか?

先ほど書き上げたClean入門の最新ページとか見てもらえると分かりますが、計算コストには結構注意してます。ただし、遅延評価は正格評価と評価順序が逆なので、再帰の方がコスト的に有利になるというだけです。 正格評価では、繰り返しより再帰の方がコスト…

Concurrent Clean : Clean入門(15) : 正格性

http://www.geocities.jp/lethevert/softwares/clean/gettingStarted15.html 「(15)正格性」を書きました。 当初は、ここで「正格タプル・リスト・配列」についても書こうと思っていたのですが、想像していたより長くなってしまったのでページを分けることに…

Concurrent Clean : リストによる抽象

Start = sum $ map (\x = x*x) $ filter isOdd [0..100]というプログラムが、処理の流れが「右から左」になるので、これを「左から右」または「上から下」にしたいという方へ。 (-->) infixl 0 (-->) a f :== f aを定義すると、 Start = [0..100] --> filter…

quiz

せっかくなので(何が?)クイズでも。 問題の定式化が曖昧なのは、わざとということで。 循環のない連結有向グラフで、入口と出口がそれぞれ1つのものを考えます。 グラフデータは次のように与えられます。 ::Node :== Int ::Arc :== (Node, Node) //(from…

Concurrent Clean : ルート式

http://sky.zero.ad.jp/~zaa54437/programming/clean/LanguageReport21/Chap3.html 関数本体 = ルート式 ; // 3.4参照 [局所関数定義] // 3.5参照

OCaml : 正格評価 : 高階関数とリストによる抽象化

Concurrent Cleanでは、次のようなプログラムは普通ですが、 Start = sum $ map (\x = x*x) $ filter isOdd [0..100]遅延評価では効率的なこういうプログラムは、正格評価では非効率になるのですが、今日、これを逆にしたら、正格評価でも効率的なプログラム…

Java : eclipse

1つのファイルに複数のクラスを書くと、エラー表示やスタックトレースからのジャンプがおかしくなることがあるけど、それは仕様ですか?

letのパターンマッチ(OCaml)

http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20060318#p02 # let A i | B i = a;;便利そう。 Cleanにそれがないかと調べてみたけれど、ないみたい。

Concurrent Clean : Clean入門

http://www.geocities.jp/lethevert/softwares/clean/gettingStarted14.html 「(14)評価戦略」を書きました。 だんだんCleanのCleanらしい部分の解説に入ってきた感じがします。 遅延評価がどういうものかという点だけでなく、なぜ遅延評価を使うのかという…

SICP : 書評

昨年の12月から読み始めたSICPですが、ぼちぼちと読みながら、昨日やっと3章を読み終わりました。 1章は、短い章で、手続きの抽象化についての説明で、簡単な手続き、計算量、高階関数を説明しています。 2章は、データの抽象化についての説明で、リスト…

sourceforge.net

久しぶりに訪れたら、随分変わっていた。使いやすくなってるみたい。 サーバーにログインができなくなって、あれと思ったら、キーファイルを登録する方式に変更になったようだ。