Hamming numbers: Difference between revisions

Line 225:
 
=={{header|ATS}}==
<lang ATS>
<lang ATS>
#include
"share/atspre_staload.hats"
 
typedef int = llint
 
fun
Line 250 ⟶ 248:
) : int = let
//
var A = @[int](2ll2, 3ll3, 5ll5)
val A = $UNSAFE.cast{arrayref(int, 3)}(addr@A)
var I = @[int](1ll1, 1ll1, 1ll1)
val I = $UNSAFE.cast{arrayref(int, 3)}(addr@I)
val H = arrayref_make_elt<int> (i2sz(succ(n)), 0ll0)
val () = H[0] := 1ll1
//
fun
Line 271 ⟶ 269:
) : intBtwe(k2, k2+1)
val ii = I[i]
val () = I[i] := ii+1ll1
val ii = $UNSAFE.cast{natLte(n)}(ii)
val () = if i = 0 then A[i] := 2ll2*H[ii]
val () = if i = 1 then A[i] := 3ll3*H[ii]
val () = if i = 2 then A[i] := 5ll5*H[ii]
in
loop(k+1, k2)
Anonymous user