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

文字列配列ソート

[id:lethevert:20070310:p1]になにやらTBがついていたようで。 クイックソートでもマージソートでも、ソートが進むにつれて近い要素同士を比較することが増えてくるわけで、文字列の場合は近い要素の比較は文字列の長さに比例して時間が掛かるようになるわけ…

Concurrent Clean : Cleanでの多相関数の実装

[id:sumii:20070312:p1]を見て、Cleanの実装をまとめておこうと。 Cleanの実装をちゃんと追って確認したわけではないけれど、CleanJを作ったときの理解では、次のようになっていたはず。 同一モジュール内は型推論で具体型を特定(必要な数だけ複製) 公開す…

Binomial Tree

という構造を知った。日本語では、2項木というらしい。

文字列ソート

文字列をソートするのに、クイックソート系のアルゴリズムをつかうのと、マージソート系のアルゴリズムを使うのでは、効率が大分変わる。 と思うのだけれど、マージソート系で文字列ソートを速くする方法ってあるのかな?

SQLの応答速度

業務系のアプリはWeb系のアプリに比べてSQLの応答速度に対する感覚がすこし違うような気がする。(また、いい加減な感覚的な話だけれど・・・)

str_c[len] = '\0';

ああ〜〜

Concurrent Clean : CleanIDE と Cleanex

[id:lethevert:20070308:p1]の続き 時々上手く動かないのは、下の件で解決したのですが、失敗したときにも、失敗を検知しないでコンパイルが進んでしまうのは問題。 やはり、きちんと対応した方がいいよなーとか。

Concurrent Clean : URLエンコード

を作らないと。 GETやPOSTの処理も。 参考) http://www.kanzaki.com/docs/html/htminfo32.html http://techtips.belution.com/ja/perl/0000/ http://hp.vector.co.jp/authors/VA014833/rfc2396J.html http://www.spencernetwork.org/reference/rfc1738-ja-U…

Concurrent Clean : リポジトリ移行

SQL bindingをOptEnvのリポジトリに移そうと思っているので、やり方を調査。 http://subversion.bluegate.org/doc/ch05s03.html#svn.reposadmin.maint.migrate - 結局、sourceforgeのリポジトリを直接触るのは面倒そうだったので、ファイルをローカルでコピ…

Concurrent Clean : Cleanex

[id:lethevert:20070308:p1]のやり方だと、iclファイルが存在しない場合に上手く動かないな。 それはともかく、Linuxの方でも同じようなことができるようになっている方がいいので、clmの中身もチェック。 clm.cのproject_node_is_abc_up_to_date()という関…

Scheme : マージソート

むしゃくしゃして書いた。マージソートなら何でもよかった。今は(ry

Concurrent Clean : CleanIDEとCleanex

CleanIDEからCleanexを呼び出す修正を作った。テストでは上手く動いているみたい。 Cleanexのパスは決めうちになっているので、環境に合わせて修正する必要があり。もっときちんと統合するほうがいいけど、いまのところこれでいいかと。 (追記)時々タイミ…

Concurrent Clean : foreign export

Cleanのプログラムを外部プログラムから呼び出す方法について。 Timothy Hochbergさんが、PythonからCleanの関数を呼び出すことに成功したという報告をしています。 Cleanを使ってDLLを作る方法について http://www.xs4all.nl/~keslr/functional/clean/howto…

Concurrent Clean : IDE

Pm\PmDriver.iclのUpdateDependencies関数で、モジュールの依存関係とコンパイルの必要を確認しています。 ここで、Cleanex拡張のチェックを埋め込んでやれば、よさそう。 - ところで、このモジュールには、stepという関数がたくさん並んでいるのですが、こ…

Concurrent Clean : 隠しオプション

プロジェクトの隠しオプションで、precompileとpostlinkというオプションを見つけた。 .prjという拡張子のファイルを開くと、Globalセクションの終わりの方にPrecompileとPostlinkのオプションが存在する。 ここに、実行ファイルへのパスを書いておくと、ビ…

Concurrent Clean : Cleanex

[id:lethevert:20070304:p5]でちょっと書いたCleanexというのは、[id:lethevert:20061103:p2]で作ったようなプリプロセッサを連続的に適用するというだけのもので、次のような感じでextensionというキーワードで適用するプリプロセッサを指定します。 module…

丁稚奉公したい

[id:lethevert:20070303:p1]の件で、自分の未熟さを痛感して、悔しいので、[id:lethevert:20070301:p3]なんて言っていないで、身の振り方をもう一度考えようという気になってきました。 ということで、丁稚奉公できるところを探そうと思っています。

sourceforge.netのsubversionでcopyがこける

という現象に悩まされていたのだが、次のところに解決策が。 http://blog.goo.ne.jp/ikkoan/e/7f91adec4f505167401cd4ae7a2c2451

Concurrent Clean : 一意要素をもつ配列

[id:lethevert:20070303:p2]に面倒なことを書いたが、 mkArray :: !Int !(Int -> u:e) -> v:(a u:e) | Array a e, [v<=u] mkArray i f = {f j \\ j <- [0..i-1]} で十分だった。 ところで、言語報告には、 配列とリストの内包表記と組合せて更新演算子を使用…

Concurrent Clean : Clean 2.2 にした

ら、コンパイルで different abc version と起こられるようになって、毎回abcファイルを消さないとコンパイルできなくなった。 何か悪いことでもしたのかな? - どうも、Environmentを追加するときに、ABC versionを記入するところがあるのだけれど、これが…

Concurrent Clean : 一意型と型クラス

一意型にも非一意型にもどちらにも適用可能なように型クラスを作るには、属性変数を使えばよいということに気づいた。 つまり、これまでこのように書いていたものを、 class (|>*) infixl 0 a b :: !*a !b -> *a 次のように書き直せば、どちらにも使えるよう…

Concurrent Clean : 型クラスに悩む

Dictionaryに $> を適用可能なようにしようと、 instance $> (dict k v) (k,v) | DictionaryU dict where ($>) d (k,v) = dictSetU k v d とすると、 key: this type variable occurs more than once in an instance type val: this type variable occurs mo…

Concurrent Clean : Cleanex

CleanexというCleanの文法をプリプロセッサによって拡張する仕組みを作っている。 とりあえず、今まで作ったところをSubversionにあげた。

失敗した

[id:lethevert:20070215:p1] 残念

Concurrent Clean : _(underscore) で始まる識別子

というのが存在する。言語報告には載っていないけれど、_SystemArray.dclなどを見てみれば、それが存在することに気づく。 で、この識別子は、宣言されているのに、普通に使うとパースエラーになる。まあ、推測するに、_(underscore) で始まるモジュールでだ…

Concurrent Clean : Hashtableを作った

Subversionリポジトリから利用できます。 一意型を要素に持つことも可能なように作成しました。

Concurrent Clean : プログラミングの勘所

しかしまあ、まだCleanプログラミングの勘所がつかみきれないというか。 どういうコードがどういうコードより望ましいのかというところが自信がない。ライブラリとかを書かなければいけないと思っているから特にそうなのだろうけど。 Haskellなんかを見てい…

Java : HashMap

うぉ。JavaのHashMapって、Object#hashCode()の値をそのまま使ってるんじゃないのか。 google:UseNewHashFunction Java

Concurrent Clean : pd_StringToPath と *World

pd_StringToPath って、パスの存在確認をしているわけじゃないのだから、FileSystemのインスタンスを引数に取る必要なんてないじゃないか!

Concurrent Clean : 一意型とdo記法

do記法って、モナド則とは独立に定義できるのではないか? つまり、do記法をモナドではなく一意型を使った形に翻訳することが可能ではないのか、とふと思った。 - たとえば、出力系の関数なら、 func f # f = fwrites "Hello " f f = fwrites "World!" f = f…