RosettaCodeData/Task/Sort-an-array-of-composite-structures/ATS/sort-an-array-of-composite-structures.ats
2023-07-01 13:44:08 -04:00

46 lines
1.2 KiB
Text

#include "share/atspre_staload.hats"
typedef pair =
'{
name = string,
value = string
}
fn
sort_pairs {n : int}
(pairs : &array (pair, n) >> _,
n : size_t n)
:<!wrt> void =
let
implement
array_quicksort$cmp<pair> (x, y) =
strcmp (x.name, y.name)
in
array_quicksort<pair> (pairs, n)
end
implement
main0 () =
let
val pairs_list : list (pair, 9) =
$list
('{name = "Warsaw", value = "Poland"},
'{name = "Prague", value = "Czech Republic"},
'{name = "London", value = "United Kingdom"},
'{name = "Paris", value = "France"},
'{name = "Madrid", value = "Spain"},
'{name = "Berlin", value = "Germany"},
'{name = "Rome", value = "Italy"},
'{name = "Moscow", value = "Russia"},
'{name = "Budapest", value = "Hungary"})
var pairs_array : @[pair][9]
val () = array_initize_list<pair> (pairs_array, 9, pairs_list)
val () = sort_pairs (pairs_array, i2sz 9)
var i : [i : nat | i <= 9] int i
in
for (i := 0; i <> 9; i := succ i)
println! (pairs_array[i].name, " -> ", pairs_array[i].value)
end