2006-04-01から1ヶ月間の記事一覧
を買いました。これは仕事用。 も平積みになっていましたが、まぁこれはいいやとパス。
の使い分けがまだ良く分かっていない。 おそらく、 build 引数が全て足りている場合の遅延関数オブジェクトを作る buildh 引数が不足している場合のカリー化関数オブジェクトを作る という区別なのでしょう。ここまでは分かった。で、その引数に与えられた情…
e_system_sAPがなんなのか分からないと前に言っていたけれど、単純なことでした。 systemモジュールのAP関数のエントリーというだけのことでした。ただし、_system.abcファイルをのぞいても、そのエントリーは見つからないのです。 アセンブリの方(_system.…
JavaもCleanもスタックマシンのVMを持つのですが、その中身は随分違います。 まず、Java。 JVMのアセンブリ風言語のjasminでメソッドを記述すると、次のような書き出しで始まります。 .method public static main([Ljava/lang/String;)V .limit stack 3 .lim…
そもそも、「出口」という発想が手続き的ですよね。それに、適切に関数を分けるという発想からすれば、出口が複数あるくらいで可読性がどうこうなるような関数は、すでに大きすぎて分割が必要です。 関数プログラミングをたしなんでいれば、パターンマッチや…
http://68user.blog27.fc2.com/blog-entry-30.html return $xml->{'totalResultsAvailable'}, "hits", ol(map { encode_utf8 li(a({href=>$_->{'ClickUrl'}}, $_->{'Title'})) } @{ $xml->{'Result'} } ); あれ、これってこんなに分かりにくいコードだったっ…
[id:moi2:20060423:1145754419]より Haskellの「.」演算子は、数学では「o」を使うらしい。 Cleanでは「o」を使う(↓)のだけれど、なぜHaskellと違うのかと思っていたら、こちらの方が数学の記法に沿っていたのか。(納得)*1 http://www.geocities.jp/leth…
[id:mmatsuoka:20060423:1145729978]より いわゆる第5文型ってやつではないですかねぇ。 「添付ファイル(attached)が、目的のファイル(a file)であることを見出してください」という感じですか? 違うかな。
関数のエクスポートは、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される…
[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つ並んで…
関数オブジェクトを作るのに、関数に対して一対一でクラスを作ることを最初考えたけれど、よく考えたら、こういう形にすればよいです。 interface CleanModule { CleanVM dispatch(CleanVM vm, int func_id) throws CleanException; } class Main implements…
仕事にしても、ハックにしても、一番時間を食っているのは、設計をしている時間でも、実装をしている時間でも、雑用をしている時間でもなくって、次に何をするべきかを考えている時間のような気がします。 はっきり言って、一日にやるべきことが全てあらかじ…
ABCコードの分析を継続中ですが、Cで書かれたCodeGeneratorのコードとCleanで書かれたABCコードの部分的な解説を交互に読みながら、分析しているのですが、C言語に比べてCleanの読みやすいこと! 読みやすく書かれているからというのもありますが、C言語でこ…
[id:higepon:20060426]より (前略)大学センター試験や、東大や早稲田などの難易度の高い大学に現役合格される方の読書速度は1500文字前後、(後略) の「大学センター試験や、」の部分がどこに掛かるのかがわからない。完全に不要な文節ではないか? それ…
http://asm.objectweb.org/ 一瞬、アセンブラかと思ったけど、そういうものではないらしい。 実行時にクラスのバイトコードにアクセスすることができるライブラリのようだ。しかもJVMに何らかの拡張を施すようなものでもないようだ。 何かに使えるかもしれな…
[id:lethevert:20060420:p1] jasminコードに変換しようと思っていたのだけれど、jasminコードを見ているうちにJavaコードを生成する方が、変換器の実装が楽になるのではないかと思った。とりあえず、プロトタイピングには、Javaコードを生成する方向でいこう…
Clean入門を完了したので、以前から懸案だったJVMでCleanを動かすという目標に取り掛かりたいと思っています。 おそらく、技術的にはそれほど困難はないと思っているのですが、知識的な困難があって、「ABCコード→Jasminコード」の変換を行いたいのですが、…
http://www.geocities.jp/lethevert/softwares/clean/gettingStarted23.html Clean入門の最後のページ「(23)デバッグ」を書きました。これで、Clean入門は終了です。 やれやれ。
(define (gen_f) (let ((a0 0)) (lambda (x) (let ((a a0)) (set! a0 x) (- a))))) (define f (gen_f))あ、いや、そういう話ではないですか・・・ - これは、まあ、半分ネタなのですが、多分、一応、工学的(制御工学とか)にはある程度の意味のある手続きな…
正格性と型クラスの関係をちょっと勘違いしてたっぽい。ささいなことだけど。
http://www.geocities.jp/lethevert/softwares/clean/gettingStarted22.html 「(22)モジュール」を書きました。こんな感じですかね。 あと1ページです。はい。 最後のページは、「デバッグ」です。Cleanは、結構使えそうなデバッグツールが標準でそろってい…
http://www.cs.ru.nl/~clean/ 会社からはつながるんだけど、自宅からはつながらない。 通信が切れてるっぽいプロバイダ(in オランダ)に送ったメールは返事がないし、こっちもその後フォローする余裕がないし。 むしろClean MLなり開発チームなりに直接メー…
http://www.geocities.jp/lethevert/softwares/clean/gettingStarted21.html 「(21)流れとリスト」を書き上げました。 なんか、どうにかこうにかという感じ。本文にあわせて、OptEnvをだいぶ拡張しました。 「再帰を繰り返しに」というセクションを入れよう…
そういえば、StdLibの方ってあまりきっちり読んでなかったなと思って、目を通していた。かなり使えそうな関数がいくつか。Clean入門では標準関数として取り上げていなかったけれど、取り上げた方がいいかも知れないものもあるなぁ。 特に、zipWithとかMaybe…
そういえば、ちょい前に、mapU, foldU, reelUという3つの関数を作ったけれど、標準関数にseq, seqListというほとんど同じ関数があるのをClean入門を書き始めた頃に気づいていたのですが、同じものを2つも用意するのはアレなので、標準関数の方にあわせてお…
昨日の話([id:lethevert:20060413:p1])は、以前にwgetのようなプログラムをCleanでどのように書くかという話([id:lethevert:20051126:p1]、[id:lethevert:20051124:p1])をした時の話につながります。 実際には動かないCleanプログラムの例として、次のよ…
[id:m-hiyama:20060411:1144727533]について Javaは型付けやらなんやらで、こういう説明をするには向いていないとはいえ、これはあまりにもアレではないですか。もうちょっとJavaを賢く使ってやらないとかわいそうな気がします。 ぱっと見て、 static import…
再帰的なプログラムを繰り返し構造に変換するというのは、純粋関数型言語を操る上では(そして、そうでない言語を使う場合にもしばしば)、意外に重要な役割を果たす。というのは、それがある種の「継続」を扱う方法の一つだからだ。 たとえば、次のような再…
よく考えたら、大域脱出も無名関数でできる。 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 --> …