2004-09-01から1ヶ月間の記事一覧

Python の deepcopy

…は、(古典的な)deep copy じゃない。という話を、某 Python スレにて。 import copy a0 = [[1, 2, 3]] * 3 a1 = copy.deepcopy(a0) a0[0][0] = 'hoge' a1[0][0] = 'fuga' print a1 #=> [['hoge', 2, 3], ['hoge', 2, 3], ['hoge', 2, 3]] print a2 #=> [[…

ソースはかりそめ

OOP

いつもの某 Ruby スレをながめていたら こんなの を見つけて(これとは直接は関係ないのですが)「ソースはかりそめ」の話は Ruby ではどうなっているのかなぁ…と思って試してみました。 class A def a; [1, 2, 3] end end a0 = A.new a1 = A.new a0.a[0] = …

#(1 2 3) から #(1 2 3 1 2 3 1 2 3) を作る

もっともエレガントな方法は? #(1 2 3), #(1 2 3), #(1 2 3)いや。そうじゃなくて…。orz (1 to: 3) inject: #() into: [: sum : mock | sum, #(1 2 3)] (1 to: #(1 2 3) size * 3) collect: [: idx | #(1 2 3) atWrap: idx] Array streamContents: [: s | 3…

今日気付いた Smalltalk と Ruby の(思想が)違うところ。

#(1 2 3) * #(4 5 6) "=> #(4 10 18) " [1, 2, 3] * [4, 5, 6] #=> error (0...3).collect {|i| [1, 2, 3][i] * [4, 5, 6][i]} #=> [4, 10, 18] #(1 2 3) * 3 "=> #(3 6 9) " [1, 2, 3] * 3 #=> [1, 2, 3, 1, 2, 3, 1, 2, 3] Array streamContents: [: s | 3…

両替プログラム その2

出力が逆順なのが気持ち悪かったので、Prolog と同じになるように手直し。 Integer >> factors: factors amplitudes: amplitudes ifFail: failBlock "27 factors: #(24 11 3) amplitudes: #(0) ifFail: [^ nil]" | amps factor newAmps rest newFail | amps …

Ruby に対抗して、Squeak でも負け惜しみ。

TokuLog! より、K A N O U . J P をうけての、「Ruby なら2行で書けます」に対抗して、Smalltalk なら1行で書けます、と。w (ま、Ruby も実質1行で、しかもはるかに短いんすけどね) *1 second asUnHtml withSqueakLineEndings convertFromWithConverte…

両替プログラム

2ちゃんの某 Prolog スレで、「両替の問題を解いてください.prolog始めて3週間で出た学校の課題です><; 」なんてのを見かけたので、Prolog の勉強を兼ねて書いてみることに。なんとかそれっぽくうごくコードにはできました。 factorize([F | Fs], N, As…

Groovy で BigInteger な fact

Groovy は整数リテラルが int ではなく Integer なのですね。 1.class #=> class java.lang.Integer 1 class "=> SmallInteger "でも、Integer.MAX_VALUE + 1 は Integer のままなので、 (Integer.MAX_VALUE + 1).class #=> class java.lang.Ineger (SmallIn…

A ><>>>>>><>>< B

某 Python スレの書き込みを見ていてふと。今のところ、これが一番スマート。 collection collection _ 'A ><>>>>>><>>'] whileTrue: [collection removeAll: '<>']. ^ String withAll: collection "=> 'A 大なり小なり部分だけを分離して、後で結合するタイ…

Strongtalk でワークスペーススクリプト

最適化されませんが、できます。おおしま さんのを拝借して。 | benchmark <[Int, [], ^Number]> fact <[Int, ^Number]> result <Number> | benchmark := [:n <Int> :c <[]> | (Time millisecondsToRun: [n timesRepeat: [c value]]) * 1000.0 / n]. fact := [:n <Int> | (2 to</int></int></number>…

Python vs Squeak

fact: 10 で測定しなおしてみました。Python は、khi さんのをお借りしました。 => Java: 0.131 MicroSeconds per call => Groovy: 120.1 MicroSeconds per call => Ruby: 66.0 MicroSeconds per call => Python: 11.8 MicroSeconds per call => Squeak: 13.…

ODECo 0.2

今週末の北海道マッキントッシュユーザー会の定例会でデモすることになったので、付け焼き刃的に(ぉぃ!)遅まきながら、勉強を兼ねて遊んでみました。ODE force field のパラメータ設定が(ってか、これだけしかないのに分からないことがあるオレって… orz…

Groovin' with Groovy

簡単なループのベンチマークのJava 版、Ruby 版 が載っていたので、早速手近なマシン(type U、1GHz)で、fact の引数を 100 に増やしたものを試してみました。 Java: 0.972 MicroSeconds per call Ruby: 899 MicroSeconds per call Java 、速すぎ(笑)。(追…

クロージャ vs オブジェクト

クロージャはこないだの台風並みに乱暴に言えば、無名関数で、関数ポインタで、無名内部クラスで、手続きを [ ] で括っただけのものだったりする一方で、アクター、ひいてはオブジェクトと理屈では等価なものだったりもするわけです。三段論法的には関数とオ…

Java の無名内部クラスとクロージャ

(ちょっと前のことになりますが)札幌ドームに向かう車中で、無名内部クラスの new にはクラスだけではなく、インターフェイスも使える(おおっ!…と一瞬、思ったけど、まあしくみを考えてみれば当たり前で、むしろ使えないほうがおかしいんですが)というこ…

さて問題です。この人は何をしたいのでしょう?

2ちゃんの某 Ruby スレで、当初思ったより盛り上がっているのを見て、ちょっと趣向を変えて悪ノリ。スクリプトから、元の問題を想像してみてください。以下は、すべて同じ問題を解決するために書いたものです。註:array などとして与えているのが、答えを…

そんな、札幌に来て Java の無名インナークラスについて教えてくれたバスケさんですが…

5年問題 に取り組む代わりに、こんな問題をくれました。 1 → 1 1 → 1 2 → 1 1 2 1 → 1 2 2 1 1 1 → 1 1 2 2 1 3 → 1 2 2 2 1 1 3 1 → 1 1 2 3 1 2 3 1 1 1 のとき、次はどんな数列になるしょう。 Squeak の Smalltalk で書くと、こんな感じ(ネタバレ注意)…