Skip to content

Commit 477518e

Browse files
committed
Sort output by lexicographic order
This looks less random and is easier to read as solutions sharing common prefix are grouped together.
1 parent 394d2b5 commit 477518e

File tree

2 files changed

+23
-12
lines changed

2 files changed

+23
-12
lines changed

HB/howto.elpi

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,19 @@ pred union i:list A, i:list A, o:list A.
3636
union L1 L2 R :-
3737
std.fold L2 L1 (x\l\l'\if (std.mem l x) (l' = l) (l' = [x|l])) R.
3838

39+
pred lt-gref i:gref, i:gref.
40+
lt-gref X Y :-
41+
gref->modname_short X "." SX, gref->modname_short Y "." SY, !, SX s< SY.
42+
43+
pred size-order i:(list A -> list A -> prop), i:list A, i:list A.
44+
size-order Rel L1 L2 :-
45+
std.length L1 S1, std.length L2 S2, !, (S1 i< S2; (S1 = S2, !, Rel L1 L2)).
46+
47+
pred lexi-order i:list gref, i:list gref.
48+
lexi-order [] [].
49+
lexi-order [X1|_] [X2|_] :- lt-gref X1 X2.
50+
lexi-order [X|T1] [X|T2] :- lexi-order T1 T2.
51+
3952
% [mixins-on-string S ML] list mixins in structures [S] is equipped with
4053
pred mixins-on-string i:string, o:list mixinname.
4154
mixins-on-string S ML :-
@@ -94,17 +107,15 @@ paths-from-for-step-using.aux MLSrc ML FL' K' (fdp F _ MLF) L R :-
94107

95108
pred pp-solutions i:list (list factoryname).
96109
pp-solutions LLF :-
97-
std.sort LLF
98-
(l1\l2\sigma s1 s2\std.length l1 s1, std.length l2 s2, s1 i=< s2)
99-
SLLF,
110+
std.sort LLF (size-order lexi-order) SLLF,
100111
% format
101112
PpSolutions = box (v 4) [
102113
str "HB: solutions (use 'HB.about F.Build' to see the arguments of each factory F):",
103114
{about.bulletize SLLF pp-solution}],
104115
% print
105116
coq.say {coq.pp->string PpSolutions},
106117
coq.say.
107-
118+
108119
pred pp-solution i:list factoryname o:coq.pp.
109120
pp-solution L (box (hov 0) PLS) :-
110121
std.map L about.pp-module PL,

tests/howto.v.out

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
HB: solutions (use 'HB.about F.Build' to see the arguments of each factory F):
22
- Ring_of_TYPE
3+
- AddAG_of_TYPE; BiNearRing_of_AddMonoid
4+
- AddAG_of_TYPE; Ring_of_AddAG
35
- AddAG_of_TYPE; SemiRing_of_AddComoid
46
- AddComoid_of_TYPE; Ring_of_AddComoid
5-
- AddAG_of_TYPE; Ring_of_AddAG
6-
- AddAG_of_TYPE; BiNearRing_of_AddMonoid
7-
- AddMonoid_of_TYPE; AddComoid_of_AddMonoid; Ring_of_AddComoid
8-
- AddComoid_of_TYPE; BiNearRing_of_AddMonoid; AddAG_of_AddComoid
9-
- AddComoid_of_TYPE; AddAG_of_AddComoid; SemiRing_of_AddComoid
107
- AddComoid_of_TYPE; AddAG_of_AddComoid; BiNearRing_of_AddMonoid
11-
- AddComoid_of_TYPE; SemiRing_of_AddComoid; AddAG_of_AddComoid
128
- AddComoid_of_TYPE; AddAG_of_AddComoid; Ring_of_AddAG
9+
- AddComoid_of_TYPE; AddAG_of_AddComoid; SemiRing_of_AddComoid
10+
- AddComoid_of_TYPE; BiNearRing_of_AddMonoid; AddAG_of_AddComoid
11+
- AddComoid_of_TYPE; SemiRing_of_AddComoid; AddAG_of_AddComoid
12+
- AddMonoid_of_TYPE; AddComoid_of_AddMonoid; Ring_of_AddComoid
1313

1414
HB: solutions (use 'HB.about F.Build' to see the arguments of each factory F):
1515
- Ring_of_TYPE
16-
- AddComoid_of_TYPE; Ring_of_AddComoid
17-
- AddAG_of_TYPE; SemiRing_of_AddComoid
1816
- AddAG_of_TYPE; BiNearRing_of_AddMonoid
1917
- AddAG_of_TYPE; Ring_of_AddAG
18+
- AddAG_of_TYPE; SemiRing_of_AddComoid
19+
- AddComoid_of_TYPE; Ring_of_AddComoid
2020

2121
The command has indeed failed with message:
2222
HB: no solution found, try to increase search depth.

0 commit comments

Comments
 (0)