answer("Yes").
answer("No").
answer("Variable = value").
receive(A) :- answer(A).
2 ?- answer(A).
A = [89, 101, 115]
Yes
我想要A = "Yes"
等。我做错了什么?
答案 0 :(得分:5)
您将获得字符串Yes,No和Variable = value的列表表示。
如果要使用术语Yes,No和Variable = value来实例化A,则应将它们用单引号括起来而不是双引号:
answer('Yes').
answer('No').
answer('Variable = value').
如果您想要返回包含双引号的条款,您应该包含它们,但也要用单引号括起每个术语:
answer('"Yes"').
answer('"No"').
answer('"Variable = value"').
答案 1 :(得分:2)
答案 2 :(得分:2)
这里没有错,你只看到字符串的内部表示。 如果您想要更易读的输出,请尝试以下方法之一:
(其中一些可能仅适用于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;
…