-
Notifications
You must be signed in to change notification settings - Fork 0
/
sml_17.sml
62 lines (49 loc) · 1.37 KB
/
sml_17.sml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
fun printInt (a:int) =
print(Int.toString(a)^" ");
fun printIntInf (a:IntInf.int) =
print(IntInf.toString(a)^" ");
fun printReal (a:real) =
print(Real.toString(a)^" ");
fun printString (a:string) =
print(a^" ");
fun getInt () =
Option.valOf (TextIO.scanStream (Int.scan StringCvt.DEC) TextIO.stdIn);
fun getIntInf () =
Option.valOf (TextIO.scanStream (IntInf.scan StringCvt.DEC) TextIO.stdIn);
fun getReal () =
Option.valOf (TextIO.scanStream (Real.scan) TextIO.stdIn);
fun printIntTable ( [] ) = ()
| printIntTable ( x::xs ) =
let
val tmp = printInt(x)
in
printIntTable(xs)
end;
fun printIntInfTable ( [] ) = ()
| printIntInfTable ( x::xs ) =
let
val tmp = printIntInf(x)
in
printIntInfTable(xs)
end;
fun getIntTable ( 0 ) = []
| getIntTable ( N:int) = getInt()::getIntTable(N-1);
fun getIntInfTable ( 0 ) = []
| getIntInfTable ( N:int) = getIntInf()::getIntInfTable(N-1);
(*****Begin*****)
val n:int=getInt();
val s:(int)list=getIntTable(n);
fun findnext(xlist:(int)list,y::ys:(int)list)=
if hd(xlist)<=y then findnext(y::xlist,ys)
else
let fun get_order [x] = y::x::ys
(* |get_order(x::xk)=
*)
|get_order(x::xs::xk)=
if xs>y then x::get_order(xs::xk)
else (y::xs::xk)@(x::ys)
in get_order(xlist)
end;
fun find(x::xs:(int)list)=findnext([x],xs);
printIntTable(find(s));
(*****End*****)