diff options
| author | Martial Simon <msimon_fr@hotmail.com> | 2025-09-15 01:07:58 +0200 |
|---|---|---|
| committer | Martial Simon <msimon_fr@hotmail.com> | 2025-09-15 01:07:58 +0200 |
| commit | 967be9e750221ab2ab783f95df79bb26d290a45e (patch) | |
| tree | 6802900a5e975f9f68b169f0f503f040056d6952 /tiger-compiler/tests/good/merge.tig | |
Diffstat (limited to 'tiger-compiler/tests/good/merge.tig')
| -rw-r--r-- | tiger-compiler/tests/good/merge.tig | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/tiger-compiler/tests/good/merge.tig b/tiger-compiler/tests/good/merge.tig new file mode 100644 index 0000000..9504ccf --- /dev/null +++ b/tiger-compiler/tests/good/merge.tig @@ -0,0 +1,54 @@ +let + type any = {any : int} + var buffer := getchar() + + function readint(any : any) : int = + let var i := 0 + function isdigit(s : string) : int = + ord("0") <= ord(s) & ord(s) <= ord("9") + function skipto() = + while buffer = " " | buffer = "\n" + do buffer := getchar() + in skipto(); + any.any := isdigit(buffer); + while isdigit(buffer) + do (i := i * 10 + ord(buffer) - ord("0"); + buffer := getchar()); + i + end + + type list = {first : int, rest : list} + + function readlist() : list = + let var any := any{any=0} + var i := readint(any) + in if any.any + then list{first=i,rest=readlist()} + else nil + end + + function merge(a : list, b : list) : list = + if a = nil then b + else if b = nil then a + else if a.first < b.first + then list {first = a.first, rest = merge(a.rest, b)} + else list {first = b.first, rest = merge(a, b.rest)} + + function printint(i : int) = + let function f(i : int) = + if i > 0 + then (f(i/10); print (chr(i-i/10*10+ord("0")))) + in if i < 0 then (print("-"); f(-i)) + else if i>0 then f(i) + else print("0") + end + + function printlist(l : list) = + if l = nil then print("\n") + else (printint(l.first); print(" "); printlist(l.rest)) + + var list1 := readlist() + var list2 := (buffer := getchar(); readlist()) + +in printlist(merge(list1,list2)) +end |
