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.