Здесь все в порядке, вы просто видите внутреннее представление строк.Если вы хотите более читаемый вывод, попробуйте один из них:
(некоторые из них могут работать только в SWI-Prolog, но вы пометили его как SWI, поэтому я думаю, что это не проблема)
используйте name/2
для преобразования числовых списков в атом:
?- name(X, "hallo").
X=hallo
?- answer(X), name(Y, X).
X = [89, 101, 115],
Y = 'Yes' ;
используйте format/2
для вывода.
format('~s',["hallo"]).
hallo
true.
?- answer(X), format('answer is "~s"',[X]).
answer is "Yes"
X = [89, 101, 115] ;
answer is "No"
X = [78, 111].
или, если вы не хотите использовать реальноестроки (списки кодов) используют одинарные кавычки:
answer('yes').
answer('no').
answer('Variable = value').
?-answer(X).
yes;
…