From 47a6b498e33f3f5fa65aca180ff77878ded8686c Mon Sep 17 00:00:00 2001 From: Markus Triska Date: Sat, 21 May 2022 18:20:08 +0200 Subject: [PATCH] ENHANCED: "f" on toplevel to report answers up to the next multiple of 5. This makes counting solutions easy. --- README.md | 5 +++-- src/lib/time.pl | 2 +- src/toplevel.pl | 17 ++++++++++------- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 68fab560..bc31310c 100644 --- a/README.md +++ b/README.md @@ -202,8 +202,9 @@ predicates it defines. For example, with the program shown above: Press `SPACE` to show further answers, if any exist. Press `RETURN` or `.` to abort the search and return to the -toplevel prompt. Press `f` to see the next 5 answers, and -`a` to see all answers. Press `h` to show a help message. +toplevel prompt. Press `f` to see up to the next multiple of +5 answers, and `a` to see all answers. Press `h` to show a help +message. Use `TAB` to complete atoms and predicate names in queries. For instance, after consulting the program above, typing `decl` followed diff --git a/src/lib/time.pl b/src/lib/time.pl index 5da5bb59..20187c2d 100644 --- a/src/lib/time.pl +++ b/src/lib/time.pl @@ -119,7 +119,7 @@ report_time(ID) :- time_state(ID, T0), '$cpu_now'(T), Time is T - T0, - ( bb_get('$first_answer', true) -> + ( bb_get('$answer_count', 0) -> Pre = " ", Post = "" ; Pre = "", Post = " " ), diff --git a/src/toplevel.pl b/src/toplevel.pl index 171b76d5..4b3e0b34 100644 --- a/src/toplevel.pl +++ b/src/toplevel.pl @@ -134,7 +134,6 @@ run_goals([Goal|_]) :- halt. repl :- - bb_put('$first_answer', true), catch(read_and_match, E, print_exception(E)), false. %% this is for GC, until we get actual GC. repl :- @@ -185,7 +184,7 @@ submit_query_and_print_results_(Term, VarList) :- write_eqs_and_read_input(B, VarList), !. submit_query_and_print_results_(_, _) :- - ( bb_get('$first_answer', true) -> + ( bb_get('$answer_count', 0) -> write(' ') ; true ), @@ -199,7 +198,7 @@ submit_query_and_print_results(Term0, VarList) :- % in the first argument, which is done by call/N ; expand_goal(Term0, user, Term) ), - bb_put('$first_answer', true), + bb_put('$answer_count', 0), submit_query_and_print_results_(Term, VarList). @@ -305,11 +304,13 @@ write_eqs_and_read_input(B, VarList) :- append([AttrGoalVars | EquationVars], Vars1), term_variables(Vars1, Vars2), % deduplicate vars of Vars1 but preserve their order. charsio:extend_var_list(Vars2, VarList, NewVarList0, fabricated), - ( bb_get('$first_answer', true) -> - write(' '), - bb_put('$first_answer', false) + bb_get('$answer_count', Count), + ( Count =:= 0 -> + write(' ') ; true ), + Count1 is Count + 1, + bb_put('$answer_count', Count1), ( B0 == B -> ( Goals == [] -> write('true.'), nl @@ -353,7 +354,9 @@ read_input(ThreadedGoals, NewVarList) :- bb_put('$report_all', true), nl, write('; '), false ; C = f -> - bb_put('$report_n_more', 5), + bb_get('$answer_count', Count), + More is 5 - Count mod 5, + bb_put('$report_n_more', More), nl, write('; '), false ; read_input(ThreadedGoals, NewVarList) ). -- 2.54.0