xs else region rc { // 可変性を閉じ込めるリージョンブロック let arr = MyArray.fromList(rc, xs); // リストを配列化 qs(rc, 0, MyArray.size(arr) - 1, arr); MyArray.freeze(arr) // 配列をリスト化 } def qs(rc: Region[r], l: Int32, r: Int32, arr: MyArray[Int32, r]): Unit \ r = // リージョンエフェクト付き if (l < r) let pi = partition(rc, l, r, l + (r - l) / 2, arr); qs(rc, l, pi - 1, arr); qs(rc, pi + 1, r, arr) else () def partition(rc: Region[r], l: Int32, r: Int32, pivot: Int32, arr: MyArray[Int32, r]): Int32 \ r = let vp = MyArray.read(pivot, arr); MyArray.swap(pivot, r, arr); let j = MyRef.make(rc, l); Range.forEach(i -> // 以下に実装が続く…… 121