]> Repositorios git - scryer-prolog.git/commitdiff
ENHANCED: format specifier ~w more faithfully emulates write/1
authorMarkus Triska <[email protected]>
Sat, 5 Apr 2025 07:47:29 +0000 (09:47 +0200)
committerMarkus Triska <[email protected]>
Sat, 5 Apr 2025 07:58:06 +0000 (09:58 +0200)
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

src/lib/format.pl

index 62a9e93e7b863f169092547d0c7fe751b097c951..6f5bac9238dbac18b497179d4856fe06138fa2ae 100644 (file)
@@ -90,15 +90,15 @@ format_(Fs, Args) -->
 format_args_cells(Fs, Args, Cells) :-
         must_be(chars, Fs),
         must_be(list, Args),
-        unique_variable_names(Args, VNs),
+        unique_variable_names(fabricated, Args, VNs),
         phrase(cells(Fs,Args,0,[],VNs), Cells).
 
-unique_variable_names(Term, VNs) :-
+unique_variable_names(Type, Term, VNs) :-
         term_variables(Term, Vs),
-        foldl(var_name, Vs, VNs, 0, _).
+        foldl(var_name(Type), Vs, VNs, 0, _).
 
-var_name(V, Name=V, Num0, Num) :-
-        charsio:fabricate_var_name(numbervars, Name, Num0),
+var_name(Type, V, Name=V, Num0, Num) :-
+        charsio:fabricate_var_name(Type, Name, Num0),
         Num is Num0 + 1.
 
 user:goal_expansion(format_(Fs,Args,Cs0,Cs),
@@ -574,7 +574,7 @@ portray_clause(Stream, Term) :-
         flush_output(Stream).
 
 portray_clause_(Term) -->
-        { unique_variable_names(Term, VNs) },
+        { unique_variable_names(numbervars, Term, VNs) },
         portray_(Term, VNs), ".\n".
 
 literal(Lit, VNs) -->