[SML 7523] 座標のストリーム出力(aPoint printOn: aStream)

AOKI Atsushi atsushi @ cc.kyoto-su.ac.jp
2009年 4月 30日 (木) 20:47:48 JST


再度、ポストします。小さな画像を添付したのが原因か、午前中に
下記のメールをポストしたのだけれど、配送されないようなので。
画像が無くとも大丈夫でしょう。

--- 青木淳@京都宇治

-------- Original Message --------
Subject: 座標のストリーム出力(aPoint printOn: aStream)
Date: Thu, 30 Apr 2009 10:57:08 +0900
From: AOKI Atsushi <atsushi @ cc.kyoto-su.ac.jp>
To: Smalltalkers' Salon Mailing List <sml @ smalltalk.jp>

こんにちは、青木淳@京都上賀茂です。

座標(Point)のストリームへの出力 (printOn: aStream)ですが、
いままでは以下のようになっていました。

printOn: aStream
    "Append to the argument aStream in terms of infix notation."

    x printOn: aStream.
    aStream nextPut: $@.
    y printOn: aStream

二項メッセージのセレクタとの関係で曖昧(あやふや)なところが
ありましたよね。

たとえば、y 座標が負数だったとき、@ の直後にマイナスが続くた
め、100 @ -200 となってしまいます。

これでは、100 @ -200 なのか、100 @- 200 なのか、判然としない
でしょ。(いままででは、LL(1) でやることができずに、この場合
に限って LR(1) もどきに遂行して、無理矢理に 100 @ -200 と解釈
していたのです。)

で、これからは Point の printOn: aStream は以下のようになり、

printOn: aStream
    "Append to the argument aStream in terms of infix notation."

    x printOn: aStream.
    aStream nextPutAll: ' @ '.
    y printOn: aStream

必ず @ の前後にスペースが入ります。これからは形式を改めて書き
なさいね!ということです。フォーマッタにかけていれば大丈夫。

新しい Smalltalk(おそらく VisualWorks 7.7 以降)では、y 座標
がマイナスのときに、@ の後ろにスペースを空けないと、エラーに
なっちゃいますので、気をつけてくださいませ。

参考のため、100 @ -200 を評価(Do it)した際に出現する例外ウィ
ンドウの画像を添えておきます。@- という二項メッセージセレクタ
がわからないよ!と言われるんです。

同様に、100,-200 と書いて、じゅん for Smalltalk の二次元座標
を得ようとしても、,- がわからないよ!と言われます。

Smalltalk コンパイラの字句解析や構文解析に無理矢理なところが
なくなって良くなったと私は思います。

------------------------------------------------------------
AOKI Atsushi          http://www.cc.kyoto-su.ac.jp/~atsushi/


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