20 May 2011
[Smalltalk] Sleep sortのpromise版
SmalltalkでSleep sort
VisualWorks限定であればPromise使えばもう少し短く書ける。Collection>>sleepSortedの実装は同じ。
Collection>>sleepSorted: toPositiveIntegerBlock
| ans |
self isEmpty ifTrue: [^Array new].
ans := OrderedCollection new.
(self collect:
[:eachElem |
[| val |
val := toPositiveIntegerBlock value: eachElem.
val seconds wait.
ans add: val] promise]) do: [:p | p value].
^ans
並行的に動いているのは、以下のようにすればわかる。
[#(4 5 3 1 2) sleepSorted] timeToRun => 5.000232 seconds
5秒より少し大きくなるのはスレッドの生成分などですね。