Collection>>sum

数日前からsqueak-devでは集合の全要素の合計を求めるsumというメソッドの定義と振る舞いについて盛り上がっていた。bike shedの部類ではあるが。

空集合のときの結果は当然0であるべきで議論の余地なしだと思っていたのだが、nilであるべきだ、という意見がAndreasから出て、それに同調する人が多いことに驚いた。そもそも今のSqueakの実装ではエラーになるのに、これまで気がついてなかったのであまりえらそうなことはいえないけど。

fold:かreduce:というメソッドを定義して、sumやmaxなどはそれを使って書けばよいだけなのに、みんな盛り上がりすぎ。

もっとも、うちのオフィスには数学に詳しい人が多いので、別の視点も次々出てくるわけではある。ペアノの公理に基づいて数がリストで表現されていて、SmallIntegerはその最適化だとしたらnilは加算に関する単位元として振舞うべきともいえるし、代数なら単位元と演算が定義できていればまあよいわけだしね。

でも、APLなら空リストの和は0ということで、やっぱり常識的には0が正しいのだ。