Commit | Line | Data |
---|---|---|
38ffcb1f SK |
1 | let |
2 | ||
3 | type any = {any : int} | |
4 | var buffer := getchar() | |
5 | ||
6 | function readint(any: any) : int = | |
7 | let var i := 0 | |
8 | function isdigit(s : string) : int = | |
9 | ord(buffer)>=ord("0") & ord(buffer)<=ord("9") | |
10 | function skipto() = | |
11 | while buffer=" " | buffer="\n" | |
12 | do buffer := getchar() | |
13 | in skipto(); | |
14 | any.any := isdigit(buffer); | |
15 | while isdigit(buffer) | |
16 | do (i := i*10+ord(buffer)-ord("0"); buffer := getchar()); | |
17 | i | |
18 | end | |
19 | ||
20 | type list = {first: int, rest: list} | |
21 | ||
22 | function readlist() : list = | |
23 | let var any := any{any=0} | |
24 | var i := readint(any) | |
25 | in if any.any | |
26 | then list{first=i,rest=readlist()} | |
27 | else nil | |
28 | end | |
29 | ||
30 | function merge(a: list, b: list) : list = | |
31 | if a=nil then b | |
32 | else if b=nil then a | |
33 | else if a.first < b.first | |
34 | then list{first=a.first,rest=merge(a.rest,b)} | |
35 | else list{first=b.first,rest=merge(a,b.rest)} | |
36 | ||
37 | function printint(i: int) = | |
38 | let function f(i:int) = if i>0 | |
39 | then (f(i/10); print(chr(i-i/10*10+ord("0")))) | |
40 | in if i<0 then (print("-"); f(-i)) | |
41 | else if i>0 then f(i) | |
42 | else print("0") | |
43 | end | |
44 | ||
45 | function printlist(l: list) = | |
46 | if l=nil then print("\n") | |
47 | else (printint(l.first); print(" "); printlist(l.rest)) | |
48 | ||
49 | var list1 := readlist() | |
50 | var list2 := (buffer:=getchar(); readlist()) | |
51 | ||
52 | ||
53 | /* BODY OF MAIN PROGRAM */ | |
54 | in printlist(merge(list1,list2)) | |
55 | end | |
56 |