vieweditattachhistoryswikistopchangessearchhelp

Squeak で執筆環境

ここからの続き…
>他のファイルを指定する時に黙って上書き
これを File List で decompress して、できた .cs ファイルを file into new change set してみてください。次に新しく呼び出す File List から機能が有効になります。安全のため、ファイル名の頭に“+”が付くものについてだけ自動保存機能が働くようにしてあります。“+”が付かないファイルについては修正後、保存をする気がないときにはキャンセル(コマンド + l《エル》) をしておかないとやっかいなことになりますので、あしからず。--sumim

動作確認取れました! うまくいきました! これでさくさく(頭に+の付いたテキストだけ)保存を気にせず書き込めます!
これがFileInというものなのですね? うーん感動。ありがとうございました。--さ茂 - 2002-06-03, 06:37:07

あ……今気づきましたが……今日登録予定のこれで、この.cs紹介していいですか? それとも未公開(^-^;)? ↑危険な香りもしますし(^-^;)。--さ茂 - 2002-06-03, 06:48:12

構いませんけど、平たく言えば親切な警告をわざわざ外す行為なので、インストールから運用までのいっさいに自己責任を伴うということを強調してお願いします(特に日本語版と合わせたご紹介とお察ししますから、文脈上、阿部さんに迷惑の及ばないよう配慮してください)。私はぜんぜんOKですので:-) --abee …、と言っていただけたので、さ茂さんには、ことさらに強調していただく必要はなさそうです。ただ、下にも書きましたが教材用として若干の細工(っちゅうか不備)がありますので…。ま、いっか。みんなで一緒に勉強しましょう!(^_^;)--sumim

ところで、さ茂さんにはただ使っていただくだけはダメ(そうです。私はケチ意地悪なのです(^_^;))で、このチェンジセット(.cs)に書かれたものの意味を紐解いていただきます(これが使用許諾条件です<思いっきり SqL 違反(笑))。とりあえず、当該チェンジセットを File List で browse code した画面(できれば fileIn する前の仮想イメージが残っていたらそちらのほうがよい)を、いろいろとツツいてみて分かったことを、コードの内容には関わらない細かいことも含めてレポートしてみてください。当面の目標としては「先頭に + が付かないファイルについても同じく動作するように改造するための情報の会得」を掲げたいのでそちらに注力していただいても構いません。最終的には、
…までいけたら言うことナシ!ですね。--sumim
- 2002-06-03, 11:11:06

えぇぇぇぇぇ! 厳しぃぃぃぃぃ(T-T)!
browse codeしてみました(fileInする前の.imageで)が……(^-^;)。
よくわかりません。

1:PluggableTextMorphのサブクラス『NaiveTextMorph』というのが、今回追加される機能ですよね?
2:
isNaiveMode
^ (fileName ifNil: [^ false]) first = $+
が、ファイルネームの先頭に+が付いているファイルの時のモードですよね?
3:
window
addMorph: (NaiveTextMorph
のところで、PluggableTextMorphの代わりにNaiveTextMorphをFileListに乗っけてる?

……ともかくわかりません(T-T)。
疑問1:
[ff _ directory newFileNamed: self fullName.
一行ですむところが、
[ff _ self isNaiveMode
ifTrue: [directory forceNewFileNamed: self fullName]
ifFalse: [directory newFileNamed: self fullName].
という形でNaiveModeが噛まされているようなのですが、[ ]で囲まれた部分の差異が?
疑問2:
listIndex = 0 ifTrue:
[self inform: 'No fileName is selected'.
^ false "failed"].
が、
["self inform: 'No fileName is selected'."
^ true "failed"].
に変わる意味が?
疑問3:
エクセルの関数とかしか頭に無い私でも、書き方の順番自体が?です。
最初にNaiveTxtMorphというサブクラスを決めるところ(本当?)まではいいのです、それ以降は何か……?

で、逃げるわけではなく、ましてはWCが観たいわけでもなく『配信小説』の〆切がありますので一旦執筆モードに戻らせていただきます(^-^;)。

こんな不出来な弟子(?)ですが、長い目で見守って下さいm(_ _)m。--さ茂 - 2002-06-03, 19:11:03

いえいえ。上出来です。期待以上です。すばらしいです。モード解除したらまた是非どうぞ。あとで適当にレスをつけておきます。--sumim - 2002-06-03, 19:40:29



>『NaiveTextMorph』というのが、今回追加される機能
唯一、残念なのがここで「機能」ということばが出てきてしまったこと(^_^;)。彼が、今回生まれた新米オブジェクト君(の名前)です。どうぞよろしくお見知り置きを(笑)。疑うことを知らない…という意味で Naive と付けてみました。

>isNaiveMode
> ^ (fileName ifNil: [^ false]) first = $+
>が、ファイルネームの先頭に+が付いているファイルの時のモードですよね?

さっそく第一のゴールに到着ですね。この + を別の文字に換えれば、その文字を頭にもつファイルで機能するようになります。もしくはこの行を ^ true に置き換えれば、すべてのファイルで動作するようになります。

これは、NaiveTextMorph のインスタンス(クラスが生み出すオブジェクトをこう呼びます)に対して、isNativeMode という名前の“刺激”を与えたときに、どんな反応をするかを記述したものです。^ (画面では ↑ ) は作業中ならそれを無条件に中断して、そのあとに続くものを反応結果として刺激を与えたものに返すという意味を持ちます。先にも述べましたとおり、^ ture と書けば、isNaiveMode という刺激に対して、いつも true というもの(実はこれもオブジェクト)を反応として返します。

true の他に、false 、nil というインスタンスをお見知りおきください。それぞれ、True、False、UndefinedObject というクラスから生み出されたオブジェクトです。nil の存在を知ると、ifNil: に気が付くと思います。なになに ifNil: [なんとか] は「なになに」というオブジェクトに対して、ifNil: [なんとか] というメッセージを送る(もとい、刺激を与える)ことを意味します。ifNil: [なんとか] は、「もし、このメッセージを受け取るオブジェクトが nil ならば、「なんとか」を実行して(その結果を返し)なさい。nil でないなら「なになに」自身を刺激の反応として返しなさい」という意味を持ちます。したがって、filename ifNil: [^false] は、filename が nil でないならそれ自身を、nil なら ^ false を実行して返しなさい、となります。ただ、先に申し上げたとおり、^ には無条件に処理を中断して、直後のオブジェクトを反応の結果として返すという意味がありますから、filename が nil なら false が無条件で返り、isNaiveMode という刺激に対する反応はおしまいになります。もし、filename が nil 以外なら、最初の文字が + かどうかをしらべてその結果を true (最初の文字は + )か false (最初の文字は + でない)で返します。

>window
> addMorph: (NaiveTextMorph
>のところで、PluggableTextMorphの代わりにNaiveTextMorphをFileListに乗っけてる?

ビンゴです。FileList は、
  window _ (SystemWindow labelled: dir pathName)
model: aFileList.
...
window
addMorph: (PluggableTextMorph
on: aFileList
text: #contents
accept: #put:
readSelection: #contentsSelection
menu: #fileContentsMenu:shifted:)
frame: (0 @ 0.3 corner: 1 @ 1).

から想像できるように、window に3つの枠を上部分に追加して、最後に PluggableTextMorph のインスタンスを追加して完成します。今回は、NaiveTextMorph という新米クラスのインスタンスを PluggableTextMorph のインスタンスの代わりに使うように指示を変更したわけです。まあ、あまりいっぱい書いても混乱するだけですから、続きはモード解除のあとで(^_^;)。


ひとつだけ。

>書き方の順番自体が?です。
についてですが、普通、エクセルとかでは

変数もしくはセル名=関数名(引数1,引数2,引数3)

ですね。Smalltalk では、

変数 _ オブジェクト
(表示では、変数←オブジェクト)

になります。変数はオブジェクトを入れる箱というよりは、通常名無しのインスタンス(オブジェクト)に対し便宜的に付けられた呼び名という意味合いが強いです。では式はどうなるかというと、

オブジェクト 刺激

となります。刺激には3種類あって、isNaiveMode のようにアルファベットのそれだけで完結するもの、四則演算のように算術記号のようなもので表現して引数(引オブジェクト?)をひとつだけ持つもの、ifNil: や ifTrue:ifFalse: のようにひとつ、もしくは複数の引数を : の後にそれぞれ従えるもの、です。

オブジェクト 刺激1 刺激2

と書いたときは、まずオブジェクトに刺激1を与えて、返ってきた反応(やはりオブジェクト)に改めて刺激2を与えるという意味になります。ま、とりあえずこんなところで。--sumim


さ茂さん。執筆モードから復帰されたら、阿部さんが WWW ブラウザの日本語対応をしてくださったので、こちらもチェックしてみてください。--sumim - 2002-06-04, 01:14:53


おはようございます。取り急ぎ途中経過。
〆切はほぼ前倒しでクリアしたので今夜あたりから復帰します。
関心空間にも今夜あたり(^-^)。
現段階、ちょっと追加したりしてます。こんな感じ。--さ茂 - 2002-06-04, 06:32:04

さ茂さんのファンにかたに刺されるカモ…(^_^;)。--sumim - 2002-06-04, 14:39:43

関心空間に登録するやいなやのご感想、ありがとうございます。リンクが一杯あって(^-^;)。
ちなみに↑さ茂フーリガン(?)はおりませんのでご安心を。<余談:日本初戦の審判は襲われるかも(^-^;) ファールの取り方に異議有り

さて、宿題の方はまだ半ばです。
また質問です。
前段の授業(^-^)で出てきた新たな疑問なんですが、.csを見つめ、それぞれ変数とオブジェクトを色分けし、説明書きを入れていて……。
「|」と「'」と「!」の記号の意味が読み取れません。
「|」は変数の宣言の何か特別なモノについているようにも思えますが、「'」は単純なコメントアウトでもないようですし、「!」については、囲む場合と行の最後に付く場合があるようですが……。
それともこういうことはあまり気にしない方が良いですか?--さ茂 - 2002-06-04, 21:37:59

執筆モード、キーワード登録、お疲れさまでした。さてご質問ですが、まず、「!」。これは browse code では出てこなかったですよね? ファイルとして定義(プログラム)を外の世界に書き出すときに区切りが分からなくならないようにするための便宜的な記号なので、Squeak の世界の中にいるうちは気にしなくていいです。

「|」はこれで括って、変数名を宣言します。| temp | のようにプログラムの最初に出ているのがそれです。こうして宣言した変数は、そのプログラムの中だけで有効になります。これ以外の変数は、他の場所で定義されています。どこでどうやって定義するかでその変数の守備範囲が変わるのですが、その話はおいおい。

「'」は文字列を表現するのに使います。'this is a pen' のようにです。通常のプログラムやエクセルでは「'」の代わりに「"」を使うと思いますが、Smalltalk では「"」はコメントになります。"this is a pen" とすると、これはコメントになって、プログラムでは意味を持たなくなります。こんなところでどうでしょう。--sumim - 2002-06-04, 22:00:00


で、さっそくScamper新バージョンでテスト書き込みします。--さ茂 - 2002-06-04, 22:09:18

やはりエラーが出ますね(^-^;)。で、書き込みは出来る(^-^;)。--さ茂 - 2002-06-04, 22:11:43


阿部さん>
エラー時の挙動:ポインターがWindowサイズ変更時の形(↑=↓を重ねた奴)になります。気がつくと戻ってますが。
あと、やはり文字色が……ちとつらいですね(^-^;)。
ところで、ScanmperはHTMLファイルを「本当にダウンロードしてテキストデータとして表示してる」んですか? 何度もWebの内容部分に書き込みしちゃいました(^-^;)--さ茂 - 2002-06-04, 22:20:06
おはようございます。
阿部さん>
>「本当にダウンロードして…」の意味がよく分かりませんでした。
こういうことです。実害は無いみたいです。ある意味便利かな(^-^)。--さ茂 - 2002-06-05, 07:01:17

難しいです。
条件式は何となく見えてきましたが、変数とインスタンスとオブジェクトがもうグルグルと頭の中を回ってます(T-T)。

追伸:
今更ながらの話なのですが……FileListではJISコード以外のテキストは書き込めないようです(T-T)。
道理でScamperで落としたHTMLファイルをコピペしても保存できなかったはずです。
これも改造したいリストに入れます(^-^;)。
あるいは他のOSの人へのデータ受け渡し用に文字コード・改行コード変換のMorphなどは最初からありそうなのですが……。--さ茂
- 2002-06-05, 21:21:14

>変数とインスタンスとオブジェクトがもうグルグルと
では、いったん FileList から離れてこれらに触れてみましょう。FileList で新しい文書(別に新しくある必要はありません、なにか書き込める場所なら)を用意して、

4 negated

と入力してください。続けて、黄ボタンメニューから print it を選びます(もしくはこコマンド + p )。すると、-4 と表示されるはずです。4 以外にも、-3 とか 0 とかを試してみて、ここで何が起こっているか、これまでの解説で理解していただけている範囲でいいので さ茂さんなりの説明を付けてみていただけますか?--sumim
- 2002-06-05, 21:48:01

やってみました。

 4 negated -4
 5 negated -5
 0 negated 0
ー4 negated 4
ー5 negated 5

これは入力した数字をマイナス値に変換するオブジェクトですね?

x negated

xという変数(刺激)にマイナス値を加えたものを返すオブジェクト?

(4+7) negated -11
それも単純に文字列に”-”記号を加えるのではなく計算してます。<当然(^-^;)

でもエクセルと対比すると……。

      エクセル  negated
(2+3)/24   10   -10
2+3/24     8   -10
2+((3/2)4)   8   -4
2+(3/2)4    8   -14
(2+(3/2))4   14  -14
(2+3)/(24)  0.625 -(5/8)
2+3/(24)  2.375  -(5/8)

てな感じです。
Squeakってどういう計算順でしたっけ?--さ茂 - 2002-06-05, 23:04:40

どこで引っかかっておられるのか分かりました。いろいろ調べていただいたのに恐縮ですが、negated に戻ります。negated はオブジェクトではなく、オブジェクトに与える「刺激」です。この刺激を受けるオブジェクトは「4」です。4 は negated という刺激を受けて「-4」というオブジェクトを反応として返します。ここまでよろしいでしょうか? --sumim - 2002-06-05, 23:09:28

あぁ……引っ掛かってます(T-T)。
オブジェクトは4! くぅぅぅ!

>オブジェクト 刺激

順番が↑と変わってるなぁとは思ったんです。--さ茂 - 2002-06-05, 23:52:45

誤解が解けてよかったです(笑)。さて、そうすると、3 + 4 はどうなるでしょう。これを刺激と刺激を受けるオブジェクトに分解してみてください。--sumim - 2002-06-05, 23:57:20

「3」が、「+4」という刺激を受けて、「7」を返す、としか思いつきません。
↑算術記号+引数が一つ?--さ茂 - 2002-06-06, 00:19:37

いえ、それで結構です。誤解は完全にとけたとみてよいですね。算術記号というより、刺激の名前がたまたま我々のなじみのある + と同じだっただけです。こうした刺激は 4 のようなオブジェクトを1つ伴って一つの刺激として作用します。

そうすると、その応用で、3 + 4 * 5 を(再び、小学校で教わったことは忘れて) Squeak/Smalltalk の世界で、print it したときどんな刺激のやりとりがあるか。語ってみていただけますか? (「Squeakってどういう計算順でしたっけ?」がらみです)--sumim
- 2002-06-06, 00:23:42

オブジェクト3が刺激+4*5を受けて……へ? 35?
ということは、3が刺激+4を受けて7に。で、この新しいオブジェクト7が刺激*5を受けて35、ということですか?
つまり、先頭からオブジェクトが続く刺激を順に受けながら変わって行く?
(明日早いので、今夜はここまででm(_ _)m)--さ茂 - 2002-06-06, 00:41:01

ビンゴです。ただ、刺激を受け止めるのは刺激の直前までの式(オブジェクト 刺激)を評価した結果、反応として返されるオブジェクトに対してで、場合によっては(たとえば、3 + 4 * 5 のような場合)、行頭のオブジェクトとは無関係( * 5 という刺激は 7 という行頭の 3 とは別のオブジェクト)となります。いずれにせよ、基本は常に「オブジェクト 刺激」です。では、negated に戻って、明日にでも、negated を選択してコマンド + m (implementors of it) 。表示されたリストから Number negated {alithmetic} をクリックしてみてください。お休みなさい。--sumim - 2002-06-06, 01:04:35

おはようございます。
厳密には3=7ではないんですね。3と、(3+4)=7は別オブジェクト? ですね。3が綿々と続く刺激で変化するというイメージではなく、刺激に対して返されたらそれはもう以前のオブジェクトとは別物。ですね?
難しい……(^-^;)。

negated
"Answer a Number that is the negation of the receiver."

^0 - self

でした。

処理を中断して0から差し引け、ということですよね?
むむむ。また出たぞself(^-^;)。
sumimさんの空間にもあるプロトタイプ言語のSelfとの関係は?--さ茂 - 2002-06-06, 05:55:59

おはようございます。Self とは関係ありそでなさそで(笑)。とりあえず Self のことは忘れてください。( --abee)

処理を中断して(っても、ここでは、「^0-self」のみなので、それ以前にも以後にも中断すべき処理はありませんが)、0 から“ self ”(今は謎のままで結構です)の示す「何か」を差し引いた結果(もっと言えば、0 に - self という刺激を与えて飛び出してきたオブジェクトを)、この刺激( negated )の反応として返しなさい、となります。あと、上の "" で括られている文章はコメントになります。刺激の名前である「negated」の行(一行目)を含めた以上が、negated という刺激が加わったときに、「あるオブジェクト」の反応の仕方を記述したものということになります。ここまでよろしいでしょうか? --sumim
- 2002-06-06, 11:20:08

あ、selfとSelf! 違いましたね。
これは刺激を与えられるオブジェクト自身(上の式で言えば3)のことを示すselfですか?--さ茂 - 2002-06-06, 17:25:53

Self にはいろいろな表記があって、self でも SELF でもいいようです。まあ、いずれにせよ忘れましょう(笑)。

そうです。self は刺激を受けたオブジェクト自身を示します。abee さんの突っ込みにもありますように変数のようで代入などはできないので、偽変数と呼ばれています。

従って、「3 negated」を print it したとき、negated という刺激を受けた 3 は、0 に - self、つまり - に自分自身を伴わせた刺激を与えて飛び出してきたオブジェクト=自らの負数を、negated という刺激の反応として返すわけです。--sumim - 2002-06-06, 17:36:45

ここで、着目していただきたいのは、この negated に対する反応の仕方はどこに記述されているか(誰が=どのオブジェクトが管理しているか)、ということです。3 でも 4 でもありません。では誰だと思いますか? あてずっぽうでもよいので。--sumim
- 2002-06-06, 17:38:37

えぇぇぇぇ(^-^;)。
あてずっぽうで、negated自身ではないですよね? ↑上の書き方だと
まだ出てきていない、見えていない……例えばSqueak本体だとかでは?--さ茂 - 2002-06-06, 18:18:14

オッケーです。混乱に拍車をかけてしまいましたね。では、negated は忘れましょう(^_^;)。

移動します。

このページを編集 (20130 bytes)


Congratulations! 以下の 3 ページから参照されています。

This page has been visited 7500 times.