2004-01-01から1年間の記事一覧

任意の整数について、平衡三進記法の各桁の trit を収めた配列を返すメソッド

なんてものも書いてみました。 Integer >> balancedTritsArray | ternary zeroValue numDigits | self isZero ifTrue: [^ Array with: 0]. self radix: 3) allButFirst: 2. ^ (ternary as: Array) collect: [: digitChar | digitChar digitValue - 1] 14 bal…

平衡三進表記

Tiki の「天秤を 3 回だけ使って 12 枚のコインの中から重さの異なる 1 枚を見つける方法」数学クイズからたどって、STUDIO KAMADA さんの「天秤を n 回だけ使って 3n-3 / 2 枚のコインの中から重さの異なる 1 枚を見つける方法」という一般解経由で、クヌス…

増井さんの Dynamic Macro

bopperjpの日記経由で、ユビキタスコンピューティング時代のユーザインタフェースの発表資料より。 繰り返し 補完 これ、Squeak システムの again (alt-j/cmd-j) にこっそり仕込んでおくと便利そうですね。実際にどこまで便利かは、実装して使ってみないこと…

Zest and Marmalade

Python 界隈で著名な(そしてアンチ Ruby 、アンチ Smalltalk 派で知られるw)新山さんの たべすぎ・ねっと/メモ 経由で Lightweight Languages 2004(アブスト、発表資料)より。発表資料の Zest and Marmalade から Squeak VM で動く仮想イメージ一式が落…

続々: n 番目の組み合わせ

Shiro さん版を受けて、SequenceableCollection >> #combinations:atATimeAt: を改良してみました。 SequenceableCollection >> combinations: digits atATimeAt: target | size lastIndex | size _ self size. (size = target ifTrue: [(self first: 1), (s…

Shiro さんの組み合わせの数版を Smalltalk で

組み合わせの数を使うとこんな感じ? (let loop ((chars (string->list *chars*)) (str '()) (num *value*)) (if (= (length str) 16) (list->string (reverse str)) (let ((x (c (- (length chars) 1) (- 15 (length str))))) (if (> x num) (loop (cdr cha…

続: n 番目の組み合わせ

ループを排除して、心持ち、すっきりとさせてみました。心持ち。w SequenceableCollection >> combinations: digits atATimeAt: target | size sum ranges cursor digit | size _ self size. (size = target]. sum _ cursor > 1 ifTrue: [ranges at: cursor…

n 番目の組み合わせ

id:sumim:20041206#p1 の続き。c. も比較的、簡単そうなのでトライしてみました。 target chars target _ 99999999999999999. chars _ '!"#$%&''()*+,-./:;?@[\]^_`{|}~0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz'. ^ chars combinati…

文字の配列を文字列にする

Ruby と違って Smalltalk の文字列(a String)は要素がすべて文字(a Character)の特殊なコレクションです。ただ、文字のみからなる配列を文字列にしたいとき、 #($a $b $c) asStringだと、 "=> '#($a $b $c)' "というように、元の配列の文字列表現になっ…

n 進数

Shiro さんのところの「Scheme:数遊び」経由で、nobsun さんところの「Cahier:2004-12-04」より。なるほど a. は n 進表記への変換というだけならば簡単だ…、というわけで何もせずに答えだけ確認してみました。 target chars size table "準備" target _ 999…

メソッドの書き手の数を数える

Squeak のような古典的な Smalltalk システムでは、メソッドのコンパイル時(編集、追加時)に書き手のイニシャル(Squeak システムでは Utilities authorInitials の値)が半ば強制的にタイムスタンプ情報に追記され、それはもちろん後から参照できます。 (…

型なし*1言語で大規模開発は可能か?

とかいう話を受けて、でしょうか? 自分が知ってる中だとSqueakが一番大きいのかな。動的な型の言語によるアプリケーションとしては。Squeakももちろん核はCで書かれているんだけど、そのCはSmalltalkのサブセットで書かれたコードを変換したものらしい。し…

「オブジェクト指向入門」

OOP

関連:id:sumim:20040525:p1 いろいろなところ(っても主に はてな 界隈ですが…)で目にするようになったので、買ってみました。 (69 ページ) ここまできたところで、もう一度多くの入門者にとって紛らわしい概念を区別しておこうと思う。それはクラスとオ…

クラス以外のオブジェクトを束縛しているグローバル変数

こんな式で調べられます。 Smalltalk reject: [: global | global isBehavior]これを inspect it (alt-/cmd- I) して、左側のペインで適当な変数名を選択すれば、注目するグローバル変数にどんなオブジェクトが束縛されているのかを右側のペインにて、さらに…

Objective-C のプロトコル

…について、その始祖に当たる言語機能が他の言語に見つけらなくて難儀しているところなのですが、上で継承にからめてプロトコルという言葉を使っていると、ふと、もしかしたら本当に(失敬!w) Objective-C*1のオリジナルで、文字通り、Smalltalk のプロト…

プロトコルブラウザとトランスクリプトの改行

確かTranscriptに改行するようメッセージを送れたと思い、WorkspaceのTranscriptという文字列を選択して、黄色ボタン (Option+ボタン) のmore...からシステムブラウザを表示する。文字列選択状態で"Command+b"でもいい。 それを見ると"TranscriptStream"のイ…

Eiffel のブロック

OOP

気になって調べてみたらありました。inline agent というらしい。 Smalltalkの block closure のような機能です。 ふむ。Java の無名インナークラスっぽい実装ではないのですね。クラス指向の OOP を標榜する(と、勝手に思い込んでいた) Eiffel にしては意…

Ruby らしさ

OOP

Ruby Conference 2004 での Nathaniel さんの発表も思い出してしまう。彼は発表の中で、現在の Test::Unit が「Ruby らしくない」といって批判し、より「Ruby らしく」したtest/unit2 を開発中だそうだ。そのサンプルの一部は発表の中で内で公表されていたが…

上手さんの XP-jp の投稿経由で「目覚まし時計が必要になった Smalltalker の話」

ネタ(なんの?w)に使えそうなので、忘れないうちにメモ。 とりあえず、最初のとっかかりのスクリプトだけ Squeak システムの Smalltalk で。 [[(Delay forSeconds: 15) wait. Time now hours = 3] whileFalse. 30 timesRepeat: [(SampledSound soundNamed…

非常にコスト高(だと思ったけどそうでもなさそ)な素数チェック

K A N O U . J P さんところを見ていて(続きを読まずに)、791 が素数かどうかちょっと気になったので。 791 isPrime "=> Unknown selector, please confirm, correct, or cancel "とか、ありそうでない。w わからんでもないけど。 n n _ 791. (Integer pr…

こういうやりとりに触れると

地道にいろいろと調べたり書いたりしてきてよかった…と。(笑) どうです、おじょうさん? ここでひとつついでに Smalltalk にどっぷりわあなにをすあwせdrftgyふじこlp;「’

3.7 では new 送信時に #initialize も暗示的に起動される

Florian さんとこ経由。ちょっと、いや、かなりびっくり。ってか呆れた。ってか悲しくなった。

.net ブリッジ

Loco de futbolさんとこ経由で、Squeak で使える .net ブリッジとか。これで C# も怖くない? な〜んてねw。 Ruby にも似たようなのがあるらしく、それの移植版だそうです。Mozilla と言えば、スジから言えば Mozilla を Squeak システムに移植してみたいも…

最初の Smalltalk のプロトタイプは 1000 行ほどの BASIC で組まれていた

っていう話は有名なんですが、どこかで見かけた文章の英語がちゃんと読めなくて確認できていなかったんですね。でも、Smalltalk システムっていつごろから仮想マシンを使い始めたんだろう…という話を調べているうちにたまたま行き着いた Smalltalk-80: Bits …

特異メソッドの例にはどんなのがいいか

特異メソッドというのは、インスタンス特異的メソッドの Ruby におけるローカルな呼び名。Rubyist Magazine - 0002号で、特異メソッドの記事にある七並べを使った特異メソッドの例があまりよくないという話があるようです。個人的には、特異メソッドの一番シ…

「オブジェクト指向プログラミングとは何か?」[Stroustrup87] (PDF, ただし '91 改訂版)

OOP

関連:[OOP] オブジェクト指向の概念の発明者は誰ですか? くだんのオブジェクト指向3点セットの元になったともくされる論文のメモ。抽象データ型に加えて、以下の機構がオブジェクト指向プログラミングをサポートするのに必要とされる。 特殊な関数呼び出…

抽象データ型のスーパーセット(カプセル化+継承・多態性) vs メッセージ指向

OOP

…の構図ってのは、クラスベースオブジェクト指向 vs プロトタイプベースオブジェクト指向 の構図にちょっと似ていますね(構図だけでなく、クラスは必須か否かを扱うだけに、完全にオーバーラップする対立点、うがった見方をすれば代理戦争的側面、もありそ…

お定まりの決めつけにいちいち反応するのも ATP の無駄遣いなような気がしますが…

OOP

Smalltalk で抽象データ型のスーパーセットをまったく無視しているとか、C++ でメッセージ指向できないとか言っているわけではありません。っていうか、まず、文献欲嫁?

オブジェクト指向に不幸があるとするならば…

OOP

つらつらとおもんみるに、ケイ(Smalltalk)が“それ”を「メッセージ指向」と言い続けなかったこと、ストラウストラップ(C++)が“また別のそれ”を「クラス指向」と言い換えなかったこと、に尽きるかな、と。

最近見つけた…

OOP

これ(オブ脳 vs アンチ)や、ちょっと古いけどこれ(Java は純粋 OOPL ?)なんかも、その典型でしょうね。上の前提に立てば、どちらも言っていることは正しい…って感じがしますから。