[SML 7178] Re: "0 @ 0" について

AOKI Atsushi aoki @ sra.co.jp
2006年 9月 24日 (日) 12:31:25 JST


青木です。

いいプログラムです。さすが濱崎さん!
ブロックの再帰構造プログラムで、座布団一枚!いや二枚!!

> こんな風に自分でコードを書いてSmalltalkの仕組みを理解していけるのも、
> Smalltalkの面白いところですね。

はい、Smalltalk のことは Smalltalk に訊ねなさい!、ですよね。

出力先をブロックに加え、引数並びを整えて、クラス名を名前空間
も含めたフルネームで出すようにしてみました。

| methodSearchBlock aBlock |
methodSearchBlock :=
        [:aClass :messageSelector :aStream |
        | aBoolean |
        aStream nextPutAll: aClass fullName.
        (aClass selectors includes: messageSelector)
            ifTrue: [aBoolean := true]
            ifFalse:
                [aClass superclass isNil
                    ifTrue: [aBoolean := false]
                    ifFalse:
                        [aStream nextPutAll: ' -> '.
                        aBoolean := methodSearchBlock
                                    value: aClass superclass
                                    value: messageSelector
                                    value: aStream]].
        aStream flush.
        aBoolean yourself].
aBlock :=
        [:anObject :messageSelector :aStream |
        (methodSearchBlock
            value: anObject class "<-- It's very important to beginners."
            value: messageSelector
            value: aStream)
                ifFalse:
                    [aStream
                        cr;
                        nextPutAll: anObject printString;
                        nextPutAll: ' can''t understand ';
                        nextPutAll: messageSelector printString;
                        flush].
        aStream yourself].
aBlock
    value: Point
    value: #basicNew
    value: (Transcript
            clear;
            yourself)

------------------------------------------------------------
R2D2 (AOKI Atsushi)        http://www.sra.co.jp/people/aoki/





SML メーリングリストの案内