RosettaCodeData/Task/Sort-numbers-lexicographically/Prolog/sort-numbers-lexicographically.pro
2023-07-01 13:44:08 -04:00

35 lines
842 B
Prolog

lexicographical_sort(Numbers, Sorted_numbers):-
number_strings(Numbers, Strings),
sort(Strings, Sorted_strings),
number_strings(Sorted_numbers, Sorted_strings).
number_strings([], []):-!.
number_strings([Number|Numbers], [String|Strings]):-
number_string(Number, String),
number_strings(Numbers, Strings).
number_list(From, To, []):-
From > To,
!.
number_list(From, To, [From|Rest]):-
Next is From + 1,
number_list(Next, To, Rest).
lex_sorted_number_list(Number, List):-
(Number < 1 ->
number_list(Number, 1, Numbers)
;
number_list(1, Number, Numbers)
),
lexicographical_sort(Numbers, List).
test(Number):-
lex_sorted_number_list(Number, List),
writef('%w: %w\n', [Number, List]).
main:-
test(0),
test(5),
test(13),
test(21),
test(-22).