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

ひさびさにリアルな本屋に行ってみました。

を買いました。これは仕事用。 も平積みになっていましたが、まぁこれはいいやとパス。

Concurrent Clean : ABCマシン(16) : buildとbuildh

の使い分けがまだ良く分かっていない。 おそらく、 build 引数が全て足りている場合の遅延関数オブジェクトを作る buildh 引数が不足している場合のカリー化関数オブジェクトを作る という区別なのでしょう。ここまでは分かった。で、その引数に与えられた情…

Concurrent Clean : ABCマシン(15) : e_system_sAP

e_system_sAPがなんなのか分からないと前に言っていたけれど、単純なことでした。 systemモジュールのAP関数のエントリーというだけのことでした。ただし、_system.abcファイルをのぞいても、そのエントリーは見つからないのです。 アセンブリの方(_system.…

あ、コメントダッシュだ

Concurrent Clean : ABCマシン(14) : JavaとCleanのスタック

JavaもCleanもスタックマシンのVMを持つのですが、その中身は随分違います。 まず、Java。 JVMのアセンブリ風言語のjasminでメソッドを記述すると、次のような書き出しで始まります。 .method public static main([Ljava/lang/String;)V .limit stack 3 .lim…

いい加減、「出口は一つ」をやめたらどうか

そもそも、「出口」という発想が手続き的ですよね。それに、適切に関数を分けるという発想からすれば、出口が複数あるくらいで可読性がどうこうなるような関数は、すでに大きすぎて分割が必要です。 関数プログラミングをたしなんでいれば、パターンマッチや…

Perl : 「perl - 勝手に添削 - WEB+DB Press Vol.32 pp.94」より

http://68user.blog27.fc2.com/blog-entry-30.html return $xml->{'totalResultsAvailable'}, "hits", ol(map { encode_utf8 li(a({href=>$_->{'ClickUrl'}}, $_->{'Title'})) } @{ $xml->{'Result'} } ); あれ、これってこんなに分かりにくいコードだったっ…

Concurrent Clean : o演算子

[id:moi2:20060423:1145754419]より Haskellの「.」演算子は、数学では「o」を使うらしい。 Cleanでは「o」を使う(↓)のだけれど、なぜHaskellと違うのかと思っていたら、こちらの方が数学の記法に沿っていたのか。(納得)*1 http://www.geocities.jp/leth…

Please find attached a file.

[id:mmatsuoka:20060423:1145729978]より いわゆる第5文型ってやつではないですかねぇ。 「添付ファイル(attached)が、目的のファイル(a file)であることを見出してください」という感じですか? 違うかな。

Concurrent Clean : ABCマシン(13) : 関数のエクスポートと push_node

関数のエクスポートは、2種類のエクスポートがあるのです。 module Lib app :: (a b -> c) a b -> cがエクスポートされると、 .export e_Lib_sapp .descexp e_Lib_dapp e_Lib_napp e_Lib_lapp 3 0 "app"で、.exportされる方は実際の計算で、.descexpされる…

Concurrent Clean : ABCマシン(11)

[id:lethevert:20060421:p3] Start = app (+) 3 5これが、次のようなABCコードに変換される buildh e_StdInt_d+;6 0 buildI 5 buildI 3 push_a 2 update_a 2 3 update_a 1 2 update_a 0 1 pop_a 1 jsr e_Lib_sapp pushI_a 0 pop_a 1 rtnupdate_aが3つ並んで…

Concurrent Clean : ABCマシン(12)

関数オブジェクトを作るのに、関数に対して一対一でクラスを作ることを最初考えたけれど、よく考えたら、こういう形にすればよいです。 interface CleanModule { CleanVM dispatch(CleanVM vm, int func_id) throws CleanException; } class Main implements…

一番時間を食うこと

仕事にしても、ハックにしても、一番時間を食っているのは、設計をしている時間でも、実装をしている時間でも、雑用をしている時間でもなくって、次に何をするべきかを考えている時間のような気がします。 はっきり言って、一日にやるべきことが全てあらかじ…

Concurrent Clean : は読みやすいな

ABCコードの分析を継続中ですが、Cで書かれたCodeGeneratorのコードとCleanで書かれたABCコードの部分的な解説を交互に読みながら、分析しているのですが、C言語に比べてCleanの読みやすいこと! 読みやすく書かれているからというのもありますが、C言語でこ…

速読速度

[id:higepon:20060426]より (前略)大学センター試験や、東大や早稲田などの難易度の高い大学に現役合格される方の読書速度は1500文字前後、(後略) の「大学センター試験や、」の部分がどこに掛かるのかがわからない。完全に不要な文節ではないか? それ…

Java : ASM : bytecode manipulation framework

http://asm.objectweb.org/ 一瞬、アセンブラかと思ったけど、そういうものではないらしい。 実行時にクラスのバイトコードにアクセスすることができるライブラリのようだ。しかもJVMに何らかの拡張を施すようなものでもないようだ。 何かに使えるかもしれな…

Concurrent Clean : ABCマシン(10)

[id:lethevert:20060420:p1] jasminコードに変換しようと思っていたのだけれど、jasminコードを見ているうちにJavaコードを生成する方が、変換器の実装が楽になるのではないかと思った。とりあえず、プロトタイピングには、Javaコードを生成する方向でいこう…

Concurrent Clean : この次の予定 : ABCマシン(9)

Clean入門を完了したので、以前から懸案だったJVMでCleanを動かすという目標に取り掛かりたいと思っています。 おそらく、技術的にはそれほど困難はないと思っているのですが、知識的な困難があって、「ABCコード→Jasminコード」の変換を行いたいのですが、…

Concurrent Clean : Clean入門(23) : デバッグ

http://www.geocities.jp/lethevert/softwares/clean/gettingStarted23.html Clean入門の最後のページ「(23)デバッグ」を書きました。これで、Clean入門は終了です。 やれやれ。

quiz : f (f x) ==> -x

(define (gen_f) (let ((a0 0)) (lambda (x) (let ((a a0)) (set! a0 x) (- a))))) (define f (gen_f))あ、いや、そういう話ではないですか・・・ - これは、まあ、半分ネタなのですが、多分、一応、工学的(制御工学とか)にはある程度の意味のある手続きな…

Concurrent Clean : 正格性

正格性と型クラスの関係をちょっと勘違いしてたっぽい。ささいなことだけど。

Concurrent Clean : Clean入門(22) : モジュール

http://www.geocities.jp/lethevert/softwares/clean/gettingStarted22.html 「(22)モジュール」を書きました。こんな感じですかね。 あと1ページです。はい。 最後のページは、「デバッグ」です。Cleanは、結構使えそうなデバッグツールが標準でそろってい…

Concurrent Clean : 公式ホームページにまだつながらない

http://www.cs.ru.nl/~clean/ 会社からはつながるんだけど、自宅からはつながらない。 通信が切れてるっぽいプロバイダ(in オランダ)に送ったメールは返事がないし、こっちもその後フォローする余裕がないし。 むしろClean MLなり開発チームなりに直接メー…

Concurrent Clean : Clean入門(21) : 流れとリスト

http://www.geocities.jp/lethevert/softwares/clean/gettingStarted21.html 「(21)流れとリスト」を書き上げました。 なんか、どうにかこうにかという感じ。本文にあわせて、OptEnvをだいぶ拡張しました。 「再帰を繰り返しに」というセクションを入れよう…

Concurrent Clean : StdLib

そういえば、StdLibの方ってあまりきっちり読んでなかったなと思って、目を通していた。かなり使えそうな関数がいくつか。Clean入門では標準関数として取り上げていなかったけれど、取り上げた方がいいかも知れないものもあるなぁ。 特に、zipWithとかMaybe…

Concurrent Clean : seq, seqList

そういえば、ちょい前に、mapU, foldU, reelUという3つの関数を作ったけれど、標準関数にseq, seqListというほとんど同じ関数があるのをClean入門を書き始めた頃に気づいていたのですが、同じものを2つも用意するのはアレなので、標準関数の方にあわせてお…

Concurrent Clean : 再帰を繰り返しに : wget

昨日の話([id:lethevert:20060413:p1])は、以前にwgetのようなプログラムをCleanでどのように書くかという話([id:lethevert:20051126:p1]、[id:lethevert:20051124:p1])をした時の話につながります。 実際には動かないCleanプログラムの例として、次のよ…

Java : 述語論理

[id:m-hiyama:20060411:1144727533]について Javaは型付けやらなんやらで、こういう説明をするには向いていないとはいえ、これはあまりにもアレではないですか。もうちょっとJavaを賢く使ってやらないとかわいそうな気がします。 ぱっと見て、 static import…

Concurrent Clean : 再帰を繰り返しに

再帰的なプログラムを繰り返し構造に変換するというのは、純粋関数型言語を操る上では(そして、そうでない言語を使う場合にもしばしば)、意外に重要な役割を果たす。というのは、それがある種の「継続」を扱う方法の一つだからだ。 たとえば、次のような再…

Concurrent Clean : 大域脱出

よく考えたら、大域脱出も無名関数でできる。 Start w = w --> stdio --> \(f,w) = "abcdef" --> \(s) = f --> fwrites "n = " --> fwritei (size s) --> fwrites "\n10 < n => abort\n" --> if (10 < size s) (fwrites "abort!") \f = f --> fwrites s --> …