Smalltalkの法灯を継ぐモダンな処理系Pharoを練習中です。今回は平均とか標準偏差とか「ありがちな」ものどもをPharo上で計算練習。計算そのものは「予定どおり」できるのだけれども、その中でのSUMの計算の仕方に戸惑ってます。正しく計算できるのは分かったけれども、お惚け老人にはお作法の真意が分からず。もやもや。
※Pharo関係記事の投稿順Indexは こちら
※今回の動作確認には、Windows11上のWSL2の上のUbuntu24.04LTS上のPharo 10.0.0を使用しています。
Collectionクラス
Pharo様は強力なCollectionクラスを持っておられます。この中を調べていくと、今回練習したかったメソッドどもは皆実装されております。
-
- 平均を求める、average
- 合計を求める、sum
- 標準偏差を求める、stdev
- 中央値を求める、median
- 最大値を求める、max
- 最小値を求める、min
- コレクションの要素数を求める、size
Collectionクラスのデータを詰め込んだインスタンスがあれば、上記のメソッドどもを駆使して自由自在だと、ホントか?
表計算ソフト上で上記のものどもを観察しておく
Pharoの外側、いつもお世話になっている表計算ソフト上に例題を作り、上記のものどもの挙動を観察しておきます。こんな感じ。
データ点数は30点、1000から1029までの整数であります。表計算ソフトでの計算はスイスイっと。
Pharo上での計算
上記、表計算ソフトと同等な計算をPharo様にお願いしたところが以下に。
ちょっとPharo様らしいな、と思うのが、averageやmedianの計算結果が「分数(有理数)」になっているところです。無暗と浮動小数使わないところ、イケてます。結果そのものは期待通りか。
ただね、Pharo素人老人は「なんでも包み隠さず」見せてくれるPharo様の舞台裏に忍び込んで標準偏差の計算の仕方を眺めてみました。こんな感じね。
黄色のマーカ引いた anyOneのところで、積算用の変数の初期値にコレクションの中のテキトーな値ひとつ入れて置き、最後にその値を差っ引いて辻褄を合わせてます。どうもこれは、青でマーカ引いた inject: into:メソッド使うときのお作法みたい。実際、総和を求める sum メソッドもこんな感じ。
何故このようなお作法になるのかは、上記、sumメソッドの黄色マーカ部分のコメントに書かれてはいるのだけれども、unitless/unit-edの件で痛い目にあったことない経験不足な年寄にはイマイチ腑に落ちませぬ。また、夜も眠れないよ(眠れんのは歳のせいでトイレが近いからだよ。。。)