funcons-simple-0.1.0.3: tests/Kdiverse/Kdiverse6.fct
initialise-binding initialise-storing initialise-giving finalise-failing finalise-throwing scope
(collateral (bind
("init",
allocate-variable (functions
(tuples ((values)*),
values))),
bind
("printArray",
allocate-variable (functions
(tuples ((values)*),
values))),
bind
("reverse",
allocate-variable (functions
(tuples ((values)*),
values))),
bind
("map",
allocate-variable (functions
(tuples ((values)*),
values))),
bind
("insertionSort",
allocate-variable (functions
(tuples ((values)*),
values))),
bind
("bubbleSort",
allocate-variable (functions
(tuples ((values)*),
values))),
bind
("siftDown",
allocate-variable (functions
(tuples ((values)*),
values))),
bind
("heapSort",
allocate-variable (functions
(tuples ((values)*),
values))),
bind
("main",
allocate-variable (functions
(tuples ((values)*),
values)))),
sequential (assign
(bound ("init"),
function closure (scope
(match
(given,
tuple (pattern closure (bind
("n",
allocate-initialised-variable
(values,
given))))),
handle-return (scope
(bind
("x",
allocate-nested-vectors (assigned (bound ("n")))),
sequential
(print ("Type ",
assigned (bound ("n")),
" numbers: "),
scope
(bind
("i",
allocate-initialised-variable
(values,
decimal-natural ("0"))),
while
(is-less-or-equal
(assigned (bound ("i")),
integer-subtract
(assigned (bound ("n")),
decimal-natural ("1"))),
sequential
(effect (give
(read,
sequential
(assign
(checked index
(integer-add
(1,
assigned (bound ("i"))),
vector-elements (assigned (bound ("x")))),
given),
given))),
effect (give
(bound ("i"),
sequential
(assign
(given,
integer-add
(assigned (given),
1)),
assigned (given))))))),
print ("Finished reading the ",
assigned (bound ("n")),
" numbers\n"),
return (assigned (bound ("x"))))))))),
assign
(bound ("printArray"),
function closure (scope
(match
(given,
tuple (pattern closure (bind
("x",
allocate-initialised-variable
(values,
given))))),
handle-return (sequential
(print ("\n"),
scope
(bind
("i",
allocate-initialised-variable
(values,
decimal-natural ("0"))),
while
(is-less-or-equal
(assigned (bound ("i")),
integer-subtract
(length (vector-elements (assigned (bound ("x")))),
decimal-natural ("1"))),
sequential
(print (assigned (checked index
(integer-add
(1,
assigned (bound ("i"))),
vector-elements (assigned (bound ("x"))))),
" "),
effect (give
(bound ("i"),
sequential
(assign
(given,
integer-add
(assigned (given),
1)),
assigned (given))))))),
print ("\n")))))),
assign
(bound ("reverse"),
function closure (scope
(match
(given,
tuple (pattern closure (bind
("x",
allocate-initialised-variable
(values,
given))))),
handle-return (scope
(bind
("n",
allocate-initialised-variable
(values,
length (vector-elements (assigned (bound ("x")))))),
scope
(bind
("i",
allocate-initialised-variable
(values,
decimal-natural ("0"))),
while
(is-less-or-equal
(assigned (bound ("i")),
integer-subtract
(checked integer-divide
(assigned (bound ("n")),
decimal-natural ("2")),
decimal-natural ("1"))),
sequential
(scope
(bind
("t",
allocate-initialised-variable
(values,
assigned (checked index
(integer-add
(1,
assigned (bound ("i"))),
vector-elements (assigned (bound ("x"))))))),
sequential
(effect (give
(assigned (checked index
(integer-add
(1,
integer-subtract
(integer-subtract
(assigned (bound ("n")),
assigned (bound ("i"))),
decimal-natural ("1"))),
vector-elements (assigned (bound ("x"))))),
sequential
(assign
(checked index
(integer-add
(1,
assigned (bound ("i"))),
vector-elements (assigned (bound ("x")))),
given),
given))),
effect (give
(assigned (bound ("t")),
sequential
(assign
(checked index
(integer-add
(1,
integer-subtract
(integer-subtract
(assigned (bound ("n")),
assigned (bound ("i"))),
decimal-natural ("1"))),
vector-elements (assigned (bound ("x")))),
given),
given))))),
effect (give
(bound ("i"),
sequential
(assign
(given,
integer-add
(assigned (given),
1)),
assigned (given)))))))))))),
assign
(bound ("map"),
function closure (scope
(match
(given,
tuple (pattern closure (bind
("m",
allocate-initialised-variable
(values,
given))),
pattern closure (bind
("f",
allocate-initialised-variable
(values,
given))),
pattern closure (bind
("x",
allocate-initialised-variable
(values,
given))))),
handle-return (scope
(bind
("i",
allocate-initialised-variable
(values,
decimal-natural ("0"))),
while
(is-less-or-equal
(assigned (bound ("i")),
integer-subtract
(length (vector-elements (assigned (bound ("f")))),
decimal-natural ("1"))),
sequential
(sequential
(print (assigned (checked index
(integer-add
(1,
assigned (bound ("i"))),
vector-elements (assigned (bound ("m")))))),
effect (apply
(assigned (checked index
(integer-add
(1,
assigned (bound ("i"))),
vector-elements (assigned (bound ("f"))))),
tuple (assigned (bound ("x")))))),
effect (give
(bound ("i"),
sequential
(assign
(given,
integer-add
(assigned (given),
1)),
assigned (given))))))))))),
assign
(bound ("insertionSort"),
function closure (scope
(match
(given,
tuple (pattern closure (bind
("x",
allocate-initialised-variable
(values,
given))))),
handle-return (scope
(bind
("i",
allocate-initialised-variable
(values,
decimal-natural ("1"))),
while
(is-less-or-equal
(assigned (bound ("i")),
integer-subtract
(length (vector-elements (assigned (bound ("x")))),
decimal-natural ("1"))),
sequential
(scope
(bind
("v",
allocate-initialised-variable
(values,
assigned (checked index
(integer-add
(1,
assigned (bound ("i"))),
vector-elements (assigned (bound ("x"))))))),
scope
(bind
("j",
allocate-initialised-variable
(values,
integer-subtract
(assigned (bound ("i")),
decimal-natural ("1")))),
sequential
(while
(if-else
(is-greater
(assigned (bound ("j")),
decimal-natural ("0")),
is-greater
(assigned (checked index
(integer-add
(1,
assigned (bound ("j"))),
vector-elements (assigned (bound ("x"))))),
assigned (bound ("v"))),
false),
sequential
(effect (give
(assigned (checked index
(integer-add
(1,
assigned (bound ("j"))),
vector-elements (assigned (bound ("x"))))),
sequential
(assign
(checked index
(integer-add
(1,
integer-add
(assigned (bound ("j")),
decimal-natural ("1"))),
vector-elements (assigned (bound ("x")))),
given),
given))),
effect (give
(integer-subtract
(assigned (bound ("j")),
decimal-natural ("1")),
sequential
(assign
(bound ("j"),
given),
given))))),
if-else
(is-greater
(assigned (checked index
(integer-add
(1,
decimal-natural ("0")),
vector-elements (assigned (bound ("x"))))),
assigned (bound ("v"))),
sequential
(effect (give
(assigned (checked index
(integer-add
(1,
decimal-natural ("0")),
vector-elements (assigned (bound ("x"))))),
sequential
(assign
(checked index
(integer-add
(1,
decimal-natural ("1")),
vector-elements (assigned (bound ("x")))),
given),
given))),
effect (give
(assigned (bound ("v")),
sequential
(assign
(checked index
(integer-add
(1,
decimal-natural ("0")),
vector-elements (assigned (bound ("x")))),
given),
given)))),
effect (give
(assigned (bound ("v")),
sequential
(assign
(checked index
(integer-add
(1,
integer-add
(assigned (bound ("j")),
decimal-natural ("1"))),
vector-elements (assigned (bound ("x")))),
given),
given))))))),
effect (give
(bound ("i"),
sequential
(assign
(given,
integer-add
(assigned (given),
1)),
assigned (given))))))))))),
assign
(bound ("bubbleSort"),
function closure (scope
(match
(given,
tuple (pattern closure (bind
("v",
allocate-initialised-variable
(values,
given))))),
handle-return (scope
(bind
("n",
allocate-initialised-variable
(values,
length (vector-elements (assigned (bound ("v")))))),
scope
(bind
("i",
allocate-initialised-variable
(values,
decimal-natural ("0"))),
while
(is-less-or-equal
(assigned (bound ("i")),
integer-subtract
(assigned (bound ("n")),
decimal-natural ("1"))),
sequential
(scope
(bind
("j",
allocate-initialised-variable
(values,
decimal-natural ("0"))),
while
(is-less-or-equal
(assigned (bound ("j")),
integer-subtract
(assigned (bound ("n")),
decimal-natural ("2"))),
sequential
(if-else
(is-greater
(assigned (checked index
(integer-add
(1,
assigned (bound ("j"))),
vector-elements (assigned (bound ("v"))))),
assigned (checked index
(integer-add
(1,
integer-add
(assigned (bound ("j")),
decimal-natural ("1"))),
vector-elements (assigned (bound ("v")))))),
scope
(bind
("t",
allocate-initialised-variable
(values,
assigned (checked index
(integer-add
(1,
integer-add
(assigned (bound ("j")),
decimal-natural ("1"))),
vector-elements (assigned (bound ("v"))))))),
sequential
(effect (give
(assigned (checked index
(integer-add
(1,
assigned (bound ("j"))),
vector-elements (assigned (bound ("v"))))),
sequential
(assign
(checked index
(integer-add
(1,
integer-add
(assigned (bound ("j")),
decimal-natural ("1"))),
vector-elements (assigned (bound ("v")))),
given),
given))),
effect (give
(assigned (bound ("t")),
sequential
(assign
(checked index
(integer-add
(1,
assigned (bound ("j"))),
vector-elements (assigned (bound ("v")))),
given),
given))))),
null),
effect (give
(bound ("j"),
sequential
(assign
(given,
integer-add
(assigned (given),
1)),
assigned (given))))))),
effect (give
(bound ("i"),
sequential
(assign
(given,
integer-add
(assigned (given),
1)),
assigned (given)))))))))))),
assign
(bound ("siftDown"),
function closure (scope
(match
(given,
tuple (pattern closure (bind
("x",
allocate-initialised-variable
(values,
given))),
pattern closure (bind
("root",
allocate-initialised-variable
(values,
given))),
pattern closure (bind
("bottom",
allocate-initialised-variable
(values,
given))))),
handle-return (scope
(bind
("done",
allocate-initialised-variable
(values,
false)),
scope
(bind
("maxChild",
allocate-variable (values)),
while
(if-else
(is-less-or-equal
(integer-multiply
(assigned (bound ("root")),
decimal-natural ("2")),
assigned (bound ("bottom"))),
not (assigned (bound ("done"))),
false),
sequential
(if-else
(is-equal
(integer-multiply
(assigned (bound ("root")),
decimal-natural ("2")),
assigned (bound ("bottom"))),
effect (give
(integer-multiply
(assigned (bound ("root")),
decimal-natural ("2")),
sequential
(assign
(bound ("maxChild"),
given),
given))),
if-else
(is-greater
(assigned (checked index
(integer-add
(1,
integer-multiply
(assigned (bound ("root")),
decimal-natural ("2"))),
vector-elements (assigned (bound ("x"))))),
assigned (checked index
(integer-add
(1,
integer-add
(integer-multiply
(assigned (bound ("root")),
decimal-natural ("2")),
decimal-natural ("1"))),
vector-elements (assigned (bound ("x")))))),
effect (give
(integer-multiply
(assigned (bound ("root")),
decimal-natural ("2")),
sequential
(assign
(bound ("maxChild"),
given),
given))),
effect (give
(integer-add
(integer-multiply
(assigned (bound ("root")),
decimal-natural ("2")),
decimal-natural ("1")),
sequential
(assign
(bound ("maxChild"),
given),
given))))),
if-else
(is-less
(assigned (checked index
(integer-add
(1,
assigned (bound ("root"))),
vector-elements (assigned (bound ("x"))))),
assigned (checked index
(integer-add
(1,
assigned (bound ("maxChild"))),
vector-elements (assigned (bound ("x")))))),
scope
(bind
("t",
allocate-initialised-variable
(values,
assigned (checked index
(integer-add
(1,
assigned (bound ("root"))),
vector-elements (assigned (bound ("x"))))))),
sequential
(effect (give
(assigned (checked index
(integer-add
(1,
assigned (bound ("maxChild"))),
vector-elements (assigned (bound ("x"))))),
sequential
(assign
(checked index
(integer-add
(1,
assigned (bound ("root"))),
vector-elements (assigned (bound ("x")))),
given),
given))),
effect (give
(assigned (bound ("t")),
sequential
(assign
(checked index
(integer-add
(1,
assigned (bound ("maxChild"))),
vector-elements (assigned (bound ("x")))),
given),
given))),
effect (give
(assigned (bound ("maxChild")),
sequential
(assign
(bound ("root"),
given),
given))))),
effect (give
(true,
sequential
(assign
(bound ("done"),
given),
given)))))))))))),
assign
(bound ("heapSort"),
function closure (scope
(match
(given,
tuple (pattern closure (bind
("x",
allocate-initialised-variable
(values,
given))))),
handle-return (scope
(bind
("n",
allocate-initialised-variable
(values,
length (vector-elements (assigned (bound ("x")))))),
scope
(bind
("i",
allocate-initialised-variable
(values,
integer-subtract
(checked integer-divide
(assigned (bound ("n")),
decimal-natural ("2")),
decimal-natural ("1")))),
sequential
(while
(is-greater-or-equal
(assigned (bound ("i")),
decimal-natural ("0")),
sequential
(effect (apply
(assigned (bound ("siftDown")),
tuple (assigned (bound ("x")),
assigned (bound ("i")),
integer-subtract
(assigned (bound ("n")),
decimal-natural ("1"))))),
effect (give
(integer-subtract
(assigned (bound ("i")),
decimal-natural ("1")),
sequential
(assign
(bound ("i"),
given),
given))))),
effect (give
(integer-subtract
(assigned (bound ("n")),
decimal-natural ("1")),
sequential
(assign
(bound ("i"),
given),
given))),
while
(is-greater-or-equal
(assigned (bound ("i")),
decimal-natural ("1")),
scope
(bind
("t",
allocate-initialised-variable
(values,
assigned (checked index
(integer-add
(1,
decimal-natural ("0")),
vector-elements (assigned (bound ("x"))))))),
sequential
(effect (give
(assigned (checked index
(integer-add
(1,
assigned (bound ("i"))),
vector-elements (assigned (bound ("x"))))),
sequential
(assign
(checked index
(integer-add
(1,
decimal-natural ("0")),
vector-elements (assigned (bound ("x")))),
given),
given))),
effect (give
(assigned (bound ("t")),
sequential
(assign
(checked index
(integer-add
(1,
assigned (bound ("i"))),
vector-elements (assigned (bound ("x")))),
given),
given))),
effect (apply
(assigned (bound ("siftDown")),
tuple (assigned (bound ("x")),
decimal-natural ("0"),
integer-subtract
(assigned (bound ("i")),
decimal-natural ("1"))))),
effect (give
(integer-subtract
(assigned (bound ("i")),
decimal-natural ("1")),
sequential
(assign
(bound ("i"),
given),
given))))))))))))),
assign
(bound ("main"),
function closure (scope
(match
(given,
tuple ()),
handle-return (sequential
(print ("Size of the array to sort = "),
scope
(bind
("x",
allocate-initialised-variable
(values,
apply
(assigned (bound ("init")),
tuple (read)))),
scope
(bind
("m",
allocate-nested-vectors (decimal-natural ("11"))),
scope
(bind
("f",
allocate-nested-vectors (decimal-natural ("11"))),
sequential
(effect (give
("The original unsorted array is:",
sequential
(assign
(checked index
(integer-add
(1,
decimal-natural ("0")),
vector-elements (assigned (bound ("m")))),
given),
given))),
effect (give
(assigned (bound ("printArray")),
sequential
(assign
(checked index
(integer-add
(1,
decimal-natural ("0")),
vector-elements (assigned (bound ("f")))),
given),
given))),
effect (give
("Reversing the array ... ",
sequential
(assign
(checked index
(integer-add
(1,
decimal-natural ("1")),
vector-elements (assigned (bound ("m")))),
given),
given))),
effect (give
(assigned (bound ("reverse")),
sequential
(assign
(checked index
(integer-add
(1,
decimal-natural ("1")),
vector-elements (assigned (bound ("f")))),
given),
given))),
effect (give
("Done!\nThe reversed array is:",
sequential
(assign
(checked index
(integer-add
(1,
decimal-natural ("2")),
vector-elements (assigned (bound ("m")))),
given),
given))),
effect (give
(assigned (bound ("printArray")),
sequential
(assign
(checked index
(integer-add
(1,
decimal-natural ("2")),
vector-elements (assigned (bound ("f")))),
given),
given))),
effect (give
("Sorting the array using insertion sort ... ",
sequential
(assign
(checked index
(integer-add
(1,
decimal-natural ("3")),
vector-elements (assigned (bound ("m")))),
given),
given))),
effect (give
(assigned (bound ("insertionSort")),
sequential
(assign
(checked index
(integer-add
(1,
decimal-natural ("3")),
vector-elements (assigned (bound ("f")))),
given),
given))),
effect (give
("Done!\nThe resulting array is:",
sequential
(assign
(checked index
(integer-add
(1,
decimal-natural ("4")),
vector-elements (assigned (bound ("m")))),
given),
given))),
effect (give
(assigned (bound ("printArray")),
sequential
(assign
(checked index
(integer-add
(1,
decimal-natural ("4")),
vector-elements (assigned (bound ("f")))),
given),
given))),
effect (give
("Reversing the array ... ",
sequential
(assign
(checked index
(integer-add
(1,
decimal-natural ("5")),
vector-elements (assigned (bound ("m")))),
given),
given))),
effect (give
(assigned (bound ("reverse")),
sequential
(assign
(checked index
(integer-add
(1,
decimal-natural ("5")),
vector-elements (assigned (bound ("f")))),
given),
given))),
effect (give
("Done!\nSorting the array using bubble sort ... ",
sequential
(assign
(checked index
(integer-add
(1,
decimal-natural ("6")),
vector-elements (assigned (bound ("m")))),
given),
given))),
effect (give
(assigned (bound ("bubbleSort")),
sequential
(assign
(checked index
(integer-add
(1,
decimal-natural ("6")),
vector-elements (assigned (bound ("f")))),
given),
given))),
effect (give
("Done!\nThe resulting array is:",
sequential
(assign
(checked index
(integer-add
(1,
decimal-natural ("7")),
vector-elements (assigned (bound ("m")))),
given),
given))),
effect (give
(assigned (bound ("printArray")),
sequential
(assign
(checked index
(integer-add
(1,
decimal-natural ("7")),
vector-elements (assigned (bound ("f")))),
given),
given))),
effect (give
("Reversing the array ... ",
sequential
(assign
(checked index
(integer-add
(1,
decimal-natural ("8")),
vector-elements (assigned (bound ("m")))),
given),
given))),
effect (give
(assigned (bound ("reverse")),
sequential
(assign
(checked index
(integer-add
(1,
decimal-natural ("8")),
vector-elements (assigned (bound ("f")))),
given),
given))),
effect (give
("Done!\nSorting the array using heap sort ... ",
sequential
(assign
(checked index
(integer-add
(1,
decimal-natural ("9")),
vector-elements (assigned (bound ("m")))),
given),
given))),
effect (give
(assigned (bound ("heapSort")),
sequential
(assign
(checked index
(integer-add
(1,
decimal-natural ("9")),
vector-elements (assigned (bound ("f")))),
given),
given))),
effect (give
("Done!\nThe resulting array is:",
sequential
(assign
(checked index
(integer-add
(1,
decimal-natural ("10")),
vector-elements (assigned (bound ("m")))),
given),
given))),
effect (give
(assigned (bound ("printArray")),
sequential
(assign
(checked index
(integer-add
(1,
decimal-natural ("10")),
vector-elements (assigned (bound ("f")))),
given),
given))),
effect (apply
(assigned (bound ("map")),
tuple (assigned (bound ("m")),
assigned (bound ("f")),
assigned (bound ("x")))))))))))))),
apply
(assigned (bound ("main")),
tuple ())))