write_term/2 does not write user specified varnames

Günter Kniesel <[email protected]> Sun, 13 Apr 2014 17:21:22 +0200
Newsgroups gmane.comp.ai.prolog.swi
Message-ID <[email protected]>
Hi Jan,

The 'numbervars(true)' option of write_term/2 misbehaves on terms 
created with the 'functor_name(Name)' option of numbervars/4.
Then it does NOT write user defined variable names:

58 ?- T = foo(A, B, A),
       numbervars(T, 0, End, [functor_name(test)]),
       write_term(T, [numbervars(false)]).
foo(test(0),test(1),test(0))    <---- Option = false writes terms: OK
T = foo(test(0), test(1), test(0)),
A = test(0),
B = test(1),
End = 2.

59 ?- T = foo(A, B, A),
       numbervars(T, 0, End, [functor_name(test)]),
       write_term(T, [numbervars(true)]).
foo(test(0),test(1),test(0))   <---- Option = true writes terms: NOT OK
T = foo(test(0), test(1), test(0)),
A = test(0),
B = test(1),
End = 2.

60 ?- T = foo(A, B, A),
       numbervars(T, 0, End, [functor_name('Test')]),
       write_term(T, [numbervars(true)]).
foo(Test(0),Test(1),Test(0))  <---- Option = true writes terms: NOT OK
T = foo('Test'(0), 'Test'(1), 'Test'(0)),
A = 'Test'(0),
B = 'Test'(1),
End = 2.

In the last two cases I expected the output  "foo(Test0,Test1,Test0)", 
according to http://www.swi-prolog.org/pldoc/man?predicate=write_term/2 
which says that the numbervars(true) option "allows for writing 
variables with user-provided names".

Regards,
Günter

PS:

Without preceding use of the functor_name option, write_term works as 
specified:

57 ?- T = foo(A, B, A), numbervars(T), write_term(T,[numbervars(true)]).
foo(A,B,A)                     <--- Option = true writes variables: OK
T = foo(A, B, A),
A = A,
B = B.

56  T = foo(A, B, A), numbervars(T), write_term(T, [numbervars(false)]).
foo($VAR(0),$VAR(1),$VAR(0))  <---- Option = false writes terms: OK
T = foo(A, B, A),
A = A,
B = B.