ref: 9d5c9d3fe5d8951fac0902abf125c68a6e720e52
parent: 9b4f17521bb8a7d96c09d540880679298ce6f08e
author: Peter Mikkelsen <peter@pmikkelsen.com>
date: Tue Jul 13 14:36:04 EDT 2021
Implement sort/2 and setof/3
--- a/stdlib.pl
+++ b/stdlib.pl
@@ -299,6 +299,10 @@
; Rest = Rest0
).
+setof(Template, Goal, Instances) :-
+ bagof(Template, Goal, Instances_list),
+ sort(Instances_list, Instances).
+
% misc helpers
variable_set(Term, []) :-
@@ -357,3 +361,19 @@
variant_list([H1|T1], [H2|T2]) :-
variant(H1, H2),
variant_list(T1, T2).
+
+% Sorting, which also removes duplicates (should be implemented in C for speed I think).
+
+sort(Ls0, Ls) :-
+ append(Lefts, [A,B|Rights], Ls0),
+ A @> B,
+ !,
+ append(Lefts, [B,A|Rights], Ls1),
+ sort(Ls1, Ls).
+sort(Ls0, Ls) :-
+ append(Lefts, [A,B|Rights], Ls0),
+ A == B,
+ !,
+ append(Lefts, [A|Rights], Ls1),
+ sort(Ls1, Ls).
+sort(Ls, Ls).
\ No newline at end of file