<<
, Title
Appendix: Benchmark Sources
rec let nfib = proc( n:int -> int )
if n < 2 then 1 else 1 + nfib( n-1 ) + nfib( n-2 )
let partition = proc( A : *int; l,r : int -> int )
begin
let k = ( l + r ) div 2
let al = A( l ) ; let ar = A( r ) ; let ak = A( k )
let t = case true of
al < ar :
if ak < al then al else
if ak < ar then { A( k ) := al ; ak }
else { A( r ) := al ; ar }
ak < ar : { A( r ) := al ; ar }
ak < al : { A( k ) := al ; ak }
default : al
let v := l ; r := r + 1
let notdone := true
while notdone do
begin
repeat l := l + 1 while l < r and A( l ) < t
if l = r then notdone := false else
begin
repeat r := r - 1
while l < r and t < A( r )
if l = r then notdone := false else
begin
A( v ) := A( r ) ; A( r ) := A( l )
v := l
end
end
end
l := l - 1
A( v ) := A( l ) ; A( l ) := t
l
end
rec let quicksort = proc( A : *int ; l,r : int )
while l < r do
begin
let k = partition( A,l,r )
if k - l > r - k
then { quicksort( A,k + 1,r ) ; r := k - 1 }
else { quicksort( A,l,k - 1 ) ; l := k + 1 }
end
<<
, Title