【发布时间】:2011-09-19 01:12:19
【问题描述】:
answer("Yes").
answer("No").
answer("Variable = value").
receive(A) :- answer(A).
2 ?- answer(A).
A = [89, 101, 115]
Yes
我想要A = "Yes" 等。我做错了什么?
【问题讨论】:
answer("Yes").
answer("No").
answer("Variable = value").
receive(A) :- answer(A).
2 ?- answer(A).
A = [89, 101, 115]
Yes
我想要A = "Yes" 等。我做错了什么?
【问题讨论】:
您将获得字符串 Yes、No 和 Variable = value 的列表表示形式。
如果您想使用术语 Yes、No 和 Variable = value 来实例化 A,您应该将它们括在单引号而不是双引号之间:
answer('Yes').
answer('No').
answer('Variable = value').
如果你想返回包含双引号的术语,你应该包括它们但也用单引号括起来每个术语:
answer('"Yes"').
answer('"No"').
answer('"Variable = value"').
【讨论】:
【讨论】:
A = "Yes、A = "No"、A="Variable = value"。
set_prolog_flag/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;
…
【讨论】: