answer("Yes").
answer("No").
answer("Variable = value").
receive(A) :- answer(A).
2 ?- answer(A).
A = [89, 101, 115]
Yes
我想要A = "Yes"
等我做錯了什麼?Prolog返回一個列表,而不是幾個可能的字符串
answer("Yes").
answer("No").
answer("Variable = value").
receive(A) :- answer(A).
2 ?- answer(A).
A = [89, 101, 115]
Yes
我想要A = "Yes"
等我做錯了什麼?Prolog返回一個列表,而不是幾個可能的字符串
您正在獲取字符串的列表表示形式是,否和變量=值。
如果要實例化的條款是,否和變量=珍惜你應該將它們括單引號代替雙引號之間:
answer('Yes').
answer('No').
answer('Variable = value').
,如果你想用雙倍返還條款報價包括在內,你應該包括他們還與單引號括起來每學期:
answer('"Yes"').
answer('"No"').
answer('"Variable = value"').
沒有什麼是錯在這裏,你剛纔看到的字符串的內部表示。 如果你想要一個更可讀的輸出嘗試其中之一:
(其中一些可能只在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;
…
我想你誤會我的意思。我想讓Prolog列出所有我給謂詞的值,因爲它們被寫成字符串......也就是'A =「是」,'A =「否」','A =「變量=值」 '。 – 2rs2ts
如果您想要將字符代碼列表打印爲字符串,請參閱您的特定Prolog系統的'set_prolog_flag/2'文檔。 –