2010年7月22日木曜日

[Squeak] クイックソート

Squeakのブロックの使い方の例として.クイックソートを考えてみた.

コストは気にせず書くと,Haskellっぽく記述できます.

Squeak 4.1以前のSqueakだと以下のプログラムは実行できません.

quickSort := [:array |
| x xs left right |
array isEmpty ifTrue:[ array ] ifFalse:[
x := array first.
xs := array allButFirst.
left := xs select:[:v | v < x].
 right := xs select:[:v | v >= x].
(quickSort value: left ),{x}, (quickSort value:right )]].

quickSort value: #(30 10 20 40 80 60).
ここでのポイントは,ブロック内リターンを使わないこと.
ブロックは最後に評価したオブジェクトの返り値がかえるので,それを利用すること.


0 件のコメント:

コメントを投稿