Markus Triska
14c8fc3e34
move ~w to least prominent position, point to more suitable specifiers
...
In particular, "~q" is a safe better choice.
2025-04-05 10:01:22 +02:00
Markus Triska
3d60094330
ENHANCED: format specifier ~w more faithfully emulates write/1
...
In particular, variables now start with "_".
Example:
?- format("~w", [X]).
%@ _A true.
Found thanks to a discussion initiated by @haijinSk:
https://github.com/mthom/scryer-prolog/discussions/2863
2025-04-05 09:58:06 +02:00
Markus Triska
b8526e0510
FIXED: portray_clause/1 for numbers
2025-02-28 08:41:19 +01:00
Markus Triska
2d4fcf9714
correct handling of floats with N digits (~f and ~Nf)
...
This addresses #2771 . Many thanks to @tmerr for reporting the issue!
The code was posted by @UWN in:
https://github.com/mthom/scryer-prolog/discussions/2805
Many thanks! With additional inputs by @adri326 and @notoria, who also
posted interesting approaches which could help to increase precision
in cases that are currently not ideally handled. Thank you all!
Please see the issue and discussion for more information.
2025-02-28 08:40:53 +01:00
Markus Triska
bc0f614bf9
FIXED: instantiation and type check for string arguments
...
This addresses #2790 .
The issue first appeared in an example reported by @ak-1 in #2788 , and
was successfully analyzed by @flexoron. Many thanks!
2025-01-23 20:18:55 +01:00
Markus Triska
8dc80b815f
use round brackets for goals involving operators
...
Examples:
?- portray_clause(((+) :- a=b,(-))).
(+) :-
a=b,
(-).
true.
?- portray_clause((a :- (b :- c))).
a :-
(b:-c).
true.
This addresses #2715 .
Currently, more round brackets than needed are emitted. Ideally, a
better approach to solve the issue here and also in toplevel.pl is
found in the future.
2024-12-17 22:51:47 +01:00
Markus Triska
6175e334a5
prevent accidental amalgamation of graphic token chars in output
...
This addresses #2713 . Many thanks to @notoria for reporting this
excellent case!
Example:
?- portray_clause(A = @).
A= @ .
true.
At other positions the now inserted space is unnecessary, as in:
?- portray_clause((head:- @,b)).
head :-
@ ,
b.
true.
The toplevel has a similar issue:
?- C = # ; false.
C = # |<-- cursor is here; redundant space after #
There may be a way to solve this issue for all cases like this.
2024-12-17 20:06:52 +01:00
Markus Triska
767d90d5e7
ENHANCED: further partial evaluation for the common control sequence ~d
2024-03-20 21:10:14 +01:00
Markus Triska
bc04790fd5
extend partial evaluation to computing lengths when statically possible
2024-03-20 21:10:14 +01:00
Markus Triska
58f7c94e74
goal expansion for format/2 and format/3
...
In this way, we benefit from partial evaluation of format strings.
2024-03-20 21:10:14 +01:00
Markus Triska
8af29c200d
strengthen type check
2024-03-20 21:10:10 +01:00
Markus Triska
1db6bff890
ENHANCED: Partial evaluation of format_//2.
...
This moves analysis of the format string to compilation time when
possible, so that parsing it at run time is no longer necessary.
2024-03-20 20:59:43 +01:00
Markus Triska
3505cc3ba0
update answers using latest toplevel output
2024-01-25 21:33:27 +01:00
Markus Triska
05ba5f4358
rely on recently improved argument indexing for determinism
...
This is possible as of 4fd37335f5 .
2024-01-25 21:31:08 +01:00
Markus Triska
92fdc7e380
use newly available double_quotes/1 write option in portray_clause_//1
2023-08-17 23:05:21 +02:00
Mark
d079a18459
removing residual debugging comments from format.pl
2023-07-02 11:10:25 -06:00
Mark
0e583d620a
implement new disjunction compilation
2023-06-23 14:11:31 -06:00
Markus Triska
58fb851717
correct table layout for entries that themselves contain |
2023-01-27 00:22:48 +01:00
Markus Triska
cc7e721611
DOC: convert library(format) documentation to DocLog format
2023-01-25 23:18:39 +01:00
Markus Triska
2889a4438b
ADDED: format specifier ~NL to limit the number of digits per line
...
Example:
%?- format("~65L", [2^1000]).
%@ 10715086071862673209484250490600018105614048117055336074437503883_
%@ 70351051124936122493198378815695858127594672917553146825187145285_
%@ 69231404359845775746985748039345677748242309854210746050623711418_
%@ 77954182153046474983581941267398767559165543946077062914571196477_
%@ 686542167660429831652624386837205668069376 true.
2022-01-10 17:52:42 +01:00
Markus Triska
f5952088e3
ADDED: format specifier ~NU, using underscores to separate groups of digits
...
Example:
?- format("~2U", [10^12]).
%@ 10_000_000_000.00 true.
2022-01-10 16:07:05 +01:00
Markus Triska
d72cb74ffa
mention phrase_to_file/3 which is being prepared in #1100
2021-11-17 21:33:15 +01:00
Markus Triska
3c988d555f
'f' --> f
2021-11-17 21:20:40 +01:00
Markus Triska
5981a65cc2
better layout
2021-11-17 21:20:40 +01:00
Markus Triska
9900762747
use newly available seq//1 from library(dcgs)
...
I am using seq(Ls) instead of plain Ls so that DCGs can be debugged
declaratively, by generalizing away nonterminals in rules.
2021-11-17 21:20:40 +01:00
Markus Triska
bd75e9c184
more elegant solution for parsing numeric arguments, using a DCG
2021-11-16 18:25:35 +01:00
Markus Triska
23df16ecf9
mention the format("~s", [Ls]) pattern and new library(pio) predicates
2021-11-16 18:20:58 +01:00
Mark Thom
75b01d5021
Merge pull request #1082 from pmoura/fix_format_predicates_missing_numbervars_option_on_w_and_q_formats
...
Fix the format/2-3 predicates missing the numbervars(true) option in the ~w and ~q formats
2021-11-13 00:05:26 -05:00
Paulo Moura
7ea20d9ce9
Fix the format/2-3 predicates missing the numbervars(true) option in the ~w and ~q formats
2021-11-08 22:00:02 +00:00
Markus Triska
a0a01b8ba7
ADDED: library(format): DCG nonterminal portray_clause_//1, in analogy to format_//2.
2021-11-07 17:47:05 +01:00
Markus Triska
e32215e19a
express format/3 and portray_clause/2 in terms of phrase_to_stream/2
2021-11-07 17:47:05 +01:00
Markus Triska
f668640e3d
move error handling to Prolog by using the new '$first_non_octet'/2
2021-11-04 18:35:22 +01:00
Markus Triska
9e13f18463
ENHANCED: Domain error non_empty_list for empty arguments, addressing #1024 .
...
Example:
?- format("~d", []).
%@ caught: error(domain_error(non_empty_list,[]),format_//2)
2021-08-15 12:29:28 +02:00
Markus Triska
9d3f3eb013
ENHANCED: format_string domain error for invalid radix in format string
...
This addresses #1024 .
Example:
?- format("hello ~0r!", [12]).
%@ caught: error(domain_error(format_string,"~0r"),format_//2)
2021-08-14 20:04:07 +02:00
Markus Triska
78c2f19e72
ENHANCED: If N is omitted in ~Nr or ~NR, it defaults to 8.
...
This is for compatibility with Quintus, SICStus and GNU Prolog,
addressing #1024 .
Example:
?- format("~r", [10]).
%@ 12 true.
2021-08-14 13:48:21 +02:00
Markus Triska
842176a595
is is --> is
2021-03-05 18:36:00 +01:00
Markus Triska
d92951ba5b
ENHANCED: more readable indentation of nested disjunctions
...
Example:
?- portray_clause((h :- a ; b ; c)).
h :-
( a
; b
; c
).
true.
2021-03-04 21:40:24 +01:00
Markus Triska
c5749cbbb1
remove unnecessary argument
2021-03-04 21:40:24 +01:00
Markus Triska
6477d21e24
ENHANCED: more readable indentation of nested ( If -> Then ; Else ) constructs
...
Example:
?- portray_clause((h :- ( a -> b ; c -> d ; e, f))).
h :-
( a ->
b
; c ->
d
; e,
f
).
true.
2021-03-03 22:34:09 +01:00
Markus Triska
1bdfc5a1a4
~| now incorporates the number of characters described so far
...
Therefore, subsequent uses of ~N| now yield the specified column,
instead of potentially overshooting.
Example:
?- format("hello~|~t~8|!", []).
hello ! true.
Such cases are probably rather uncommon: Relative positioning with ~N+
is more likely to be used in such cases, and that worked as intended
also previously as it does now:
?- format("hello~|~t~3+!", []).
hello ! true.
In fact, if absolute positions are used, then ~| can be omitted entirely:
?- format("hello~t~8|!", []).
hello ! true.
2021-02-09 20:55:46 +01:00
Markus Triska
27a52ef56a
reflect improved determinism thanks to the improvements by @notoria
2020-12-23 00:05:29 +01:00
Markus Triska
4efbc20a4f
ENHANCED: format_//2, format/[2,3], portray_clause/1 are now deterministic.
...
This works as soon as #732 is merged, since then maplist/N and foldl/N
are deterministic in the required cases.
This also resolves the extra choicepoint of time/1 (see #378 ).
Many thanks to @notoria for implementing better indexing in #732 ,
which allowed me to find this opportunity for improvement!
2020-12-19 18:18:14 +01:00
Markus Triska
5f3ab823fd
FIXED: format_//2: Keep different variables distinct.
...
Example:
?- phrase(format_("~w~w", [_,_]), Ls).
%@ Ls = "AB"
%@ ; false.
2020-09-05 09:58:49 +02:00
Markus Triska
dcc4b91b35
ENHANCED: flush output for impure I/O (format/[2,3], portray_clause/1 etc.)
...
Without this, we do not get a (timely) prompt in cases like:
?- format("press a key: ", []), get_single_char(C).
whereas for example write/1 already works in such cases:
?- write('press a key: '), get_single_char(C).
press a key:
2020-07-25 09:49:02 +02:00
Markus Triska
8958ea036e
ENHANCED: much faster format/3 for text streams
...
This is now also used by format/2 to emit output on the terminal,
and significantly speeds up toplevel output of long strings.
2020-06-16 21:13:03 +02:00
Markus Triska
10a0f708b9
use format/3 to benefit from efficiency improvements
2020-06-14 10:51:24 +02:00
Markus Triska
409d3c168d
ENHANCED: faster format/3 when writing to binary streams
...
This is also more secure, since it does not change the atom table
and therefore leaves little trace of what was processed.
2020-06-14 10:43:25 +02:00
Markus Triska
44ebd894d5
ADDED: portray_clause/2, writing to a specified stream.
2020-06-13 16:45:47 +02:00
Mark Thom
33325f1574
remove vestigial prolog/ directory ( #444 )
2020-06-12 18:26:38 -06:00