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

Gotoと副作用

http://www.chrylers.com/weblog/topten.phpを見ながら思ったのだが、 Goto(というか、ジャンプ命令)がプログラムの複雑さに与える影響って、副作用がプログラムの複雑さに与える影響と同程度のような気がする。 感覚的な比較だけど。

Concurrent Clean : appendの計算量

(++)という演算子がある。これは、リストとリストを結合する演算子だ。 list1 ++ list2 [1,2,3,4] ++ [5,6,7,8]と使う。 で、最近まで、これの計算量を間違って考えていた。 正格な言語の連想で、 [] ++ [1] ++ [2] ++ [3] ++ [4] ++ [5]と書くよりも、 reve…

試験が終わった。さあ勉強しよう

http://homepage3.nifty.com/iromono/diary/200602A.html#10 一仕事終わったところだし、じゃあハックするか http://www.jmuk.org/d/?path=2006/02/16#d16t03 そういやそうだ。 朝起きて会社に行くまで、プログラミングしてブログ書いて、会社から帰って寝る…

ウォンビン

う音便と聞き間違えた

Concurrent Clean : タプル

多値関数([id:lethevert:20060210:p1])に関連して、ここで([id:lethevert:20060208:p1])$演算子を定義したが、これは、タプルに拡張できる。 ($) infixr 0 //:: (a -> z) a -> z ($) f a :== f a ($$) infixr 0 //:: (a b -> z) (a,b) -> z ($$) f (a, b…

Concurrent Clean : 正格性解析

http://d.hatena.ne.jp/tanakh/archive?word=wcを見ながら、Cleanでどういうチューニングがありえるかを考えていた。 文字の読み込みをバッファリングしてみようかと思って、 ::BufferedFile = Buffered !.File !{#Char} !Int buffering f = Buffered f "" 0…

Concurrent Clean : 代数型定義の中置記法

があるらしい。Haskellのリストの : って、これで定義しているのかな? http://sky.zero.ad.jp/~zaa54437/programming/clean/LanguageReport21/Chap5.html#sc1

Java : Listの使い方

先日([id:lethevert:20060211:p2])、ArrayListが使いたい場合でも、 List list = new ArrayList();としておくのが作法であり、それは、後から実装を交換する可能性があるからだ、ということを書いたが、それがどういうことかということを説明する。 規模に…

全てのオブジェクト指向プログラマに贈る・・・

ANSI Common Lisp (スタンダードテキスト) p.288 注記 158 もう一度書く:この種の変更は全てのコードのほかの部分を見ずにできる。こうした発想は一部の読者には非常になじみ深いものであろう。これはスパゲティコードを書くためのレシピである。 オブジェ…

Java : インターフェースをnewする?

[id:lethevert:20060207:p1]の続き。 まず、Listは明らかに例が悪い Listに限らず、コレクション系は、実装によってその性能特性がものすごく変わる。だから、もしもまじめに計算量のことを考えているプログラマなら、どんな場合でもそのListの実装がどうで…

多値関数

[id:m-hiyama:20060209:1139450736]さんのところで、多値関数に関する議論が進んでいる。 多値関数というと、コメント欄でも指摘されていますけど、Perlがありますね。 sub f { return $_[0]*2, $_[1]*2; }みたいに書けば、引数を2つ取って、それらを2倍し…

多値関数(2)

[id:m-hiyama:20060210:1139532309]で、多値がなければ成立しない例が知りたいということなので、Concurrent Cleanの例を説明しておきましょう。 CleanはHaskellに似た純粋関数型言語で、非正格な評価戦略をとっているため、実行順序がコードの文面とは異な…

Java : 遅延リスト

[id:lethevert:20060208:p3] 遅延リストを作ってみた。 以下、サンプルコード。 import java.util.List; import java.util.Iterator; public class Main { public static void main(String[] args) { //有限の遅延リスト Iteratorの利用 List<Integer> list = new Laz</integer>…

Java : Listの範囲操作

これでよかったらしい。 list.subList(from, to).clear();こういう処理をしたいと思ったことは、今まで少なかったように思うが、今後のために覚えておこうと思う。

Java : 遅延評価

[id:lethevert:20060207:p4] そういえば、Javaには遅延評価を表現する文法がないのも不満だった。 で、こんな文法ならありえそうかなとか思った。 class Lazy { pubic final lazy int value = value(); private int value() { return ... } }で、簡略化して…

Java : 継承と実装

菱形継承のことを考えていた。 平行四辺形と正方形の関係を考えると、菱形継承を避ける(恣意的でない)合理的なアイデアが非常に難しいケースがあることは理解できる気がする。 interface 平行四辺形; interface 長方形 extends 平行四辺形; interface 菱形…

Concurrent Clean : 平均

http://wirbeln.tblog.jp/?eid=72499で平均を求める関数をCleanで書いている。 こういう風に書くのはどうだろう? mean ls = (\(x,y) = toReal x/toReal y) $ foldl (\(x,y) a = (x+a, y+1)) (0,0) lsただし、$は以下のように定義する。([id:lethevert:2005…

Java : スレッドプログラミング

Javaでwait()とnotify()を使う際のお作法って、こんな感じでいいのかな? class Something { private Integer value = null; public int wait_and_return() { if (value == null) { wait_for_value(); } return value; } private synchronized wait_for_valu…

余談

身近で病んでいる人を理解できない人が、どんな福祉活動をしても、それが本心からのものであることを、完全に信頼することはできないように思う。

Java : Javaの嫌いなところ

あー、最近、Java Loveな感じの記事が多かったようなので、せっかくなので、Javaが嫌いなところも挙げてみましょう。 メソッド呼び出しに"()"と","を使うところ シンボルに記号が自由に使えないところ 型推論がないところ(暗黙型よりもちょっと本格的なやつ…

Java : ファクトリーとか

[id:lethevert:20060204:p4] 内部クラスを上手く使おうシリーズです。 今回のは、先のインターフェースをnewする話ではないですが、インターフェースのファクトリーを作るのに非常に使えそうなテクニックです。 public interface Something { //インターフェ…

Java : インターフェースをnewする?

みずしまさんとこを発端に、(おおもとは[id:hiuchida:20051228#1135766855]) List list = new List();と書くことについて盛り上がっていますが、なぜこの書き方に支持が集まるのかよく分からないのですが・・・ というか、こういうことが書きたければ、 Li…

Java : 初期化ブロック

気になったので、調査してみました。 public class Main { static class Test { { num = 0; /*p(num);*/} //コンパイルエラー int num = num(); Test() { num = 1; p(num);} { num = 2; p(num);} int num() { p(3); return 3;} { num = 4; p(num);} } public…

メモ「事実は理論を変えない」

http://inoue0.exblog.jp/2611622/ 理論を変化させるものは新事実や新発見ではない。認識の準拠枠なのだ。それゆえ、科学者は、ときとして、自分の拠って立つ準拠枠を疑う必要がある。

Javaに文句をいう人が、Haskellの文法を見たら、きっと卒倒する。

[id:lethevert:20060204:p3]について突っ込みが入ったので、補足をば。(文法というと用語法を間違っているのは違いないと思うのだけれど、その辺は愛嬌で。) 突っ込みの内容については、それ以前のところにもっとたくさんいろいろあるんですよ。 たとえば …

Java : publicな内部クラスとstatic import

[id:lethevert:20060204:p4] 内部クラスをpublicにすることができます。そうすることで、その内部クラスをパッケージ外のクラスからも参照できるようにすることができます。(publicメソッドやpublicメンバと同じ考え方です) また、内部クラスにstaticをつ…

Java : 不思議なブロック

ええと、下のコードを自分で書いて、何故コンパイルが通るのか、しばらく悩んでいました。特に static { } という奴。 使い方としては、コンストラクタを書いたり、初期化用メソッドを書いたりしないで初期化コードを書きたいときとかに使えるのかな。static…

余談ですが

オブジェクト指向プログラミングのスタイルを取って、英語の「主語 動詞 目的語」の語順と絡めて議論する人を時々見ますけど、あれってどうなんですかね。 Smalltalk方面では、メソッド名に動詞を持ってくるという習慣を特別に持っていないらしい([id:lethe…

純粋関数型言語の系譜

http://www.levenez.com/lang/history.html

Java : DSL : SQL Query

[id:lethevert:20060202:p4]の続き。 Javaでもある程度のDSLが書けるんじゃない?ということで、ちょっとやってみました。 JavaのDSLというと、JParsecを思い出すのだけど、それとはちょっと違う感じで。 サンプルコード 対象とした領域は、SQLの組み立てと…