Strongtalk でワークスペーススクリプト
最適化されませんが、できます。おおしま さんのを拝借して。
| benchmark <[Int, [], ^Number]> fact <[Int, ^Number]> result <Number> | benchmark := [:n <Int> :c <[]> | (Time millisecondsToRun: [n timesRepeat: [c value]]) * 1000.0 / n]. fact := [:n <Int> | (2 to: n) inject: 1 into: [:s <Number> :t <Number> | s * t]]. result := benchmark value: 100000 value: [fact value: 10]. 'Strongtalk: ', result printString, ' MicroSeconds per call'
=> Strongtalk: 1.48 MicroSeconds per call
なお、じつは型チェックは最適化には影響しないので、
benchmark fact result |
としても、計測の結果は同じです。もちろん、10 factorial なら速くなります。ただ、メソッドにしてあれば #inject:into:(ループ)版も #factorial(再帰)版も、結果は変わりません。