summaryrefslogtreecommitdiff
path: root/tiger-compiler/tests/good/merge.tig
diff options
context:
space:
mode:
authorMartial Simon <msimon_fr@hotmail.com>2025-09-15 01:07:58 +0200
committerMartial Simon <msimon_fr@hotmail.com>2025-09-15 01:07:58 +0200
commit967be9e750221ab2ab783f95df79bb26d290a45e (patch)
tree6802900a5e975f9f68b169f0f503f040056d6952 /tiger-compiler/tests/good/merge.tig
add: added projectsHEADmain
Diffstat (limited to 'tiger-compiler/tests/good/merge.tig')
-rw-r--r--tiger-compiler/tests/good/merge.tig54
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