Jest to częsty problem w SWI. Domyślnie "abc" to lista kodów znaków, dlatego jest drukowana jako:
?- Xs = "abc".
Xs = [97, 98, 99].
Czy można to z łatwością zmienić? Wyobraź sobie, że masz listę odległości, które zdarzą się na 97, 98 i 99. W takim przypadku ciąg byłby bardzo mylący jako odpowiedź. Dlatego nie ma żadnego czystego rozwiązania twojego problemu, o ile notacja łańcuchowa oznacza kody listy znaków!
Można przełączać znaczenie „abc” do listy znaków, które są atomy długości 1:
?- set_prolog_flag(double_quotes,chars).
true.
?- Xs = "abc".
Xs = [a, b, c].
Jeśli jesteś zadowolony z niego można użyć library(double_quotes)
.
?- use_module(library(double_quotes)).
true.
?- Xs = "abc".
Xs = "abc".
Aby uzyskać więcej informacji, zobacz this thread.
(należy powiedzieć, że pierwsza lista zawiera ciągi, drugie atomy) – magus