簡體   English   中英

序詞到字符串

[英]prolog term to string

我有一個這樣的序言列表:

[p(X,Y,Z),r(H,G,K)] 

我想將其轉換為:

'p(X,Y,Z)r(H,G,K)'  

它只是謂詞列表,應該轉換為字符串。

你有什么主意嗎? (我使用序言)

我認為這樣做是不可能的。 聲明變量后,其名稱將丟失以進行進一步處理。

編輯:

如果您不介意丟失名稱,則可能會發生這種情況。 至少在SWI-Prolog中:

?- format(atom(A), "~w~w", [p(X,Y,Z),r(H,G,K)]).
A = 'p(_G924,_G925,_G926)r(_G931,_G932,_G933)'.

您可以使用variable_names選項來閱讀條款,該選項為您提供閱讀條款中的名稱=變量對的列表。 所以也許這就是您所需要的。

這是一個讀取術語的命令行,然后將變量與變量名統一,最后以您在問題中指定的方式將結果打印到原子中。

?- read_term(Term, [variable_names(VarNames)]), maplist(call, VarNames),
                                with_output_to(atom(Atom), maplist(write, Term)).
|: [p(X,Y,Z),r(H,G,K)].
Term = [p('X', 'Y', 'Z'), r('H', 'G', 'K')],
VarNames = ['X'='X', 'Y'='Y', 'Z'='Z', 'H'='H', 'G'='G', 'K'='K'],
Atom = 'p(X,Y,Z)r(H,G,K)'.

請注意,它會修改讀取的術語,因此您可能需要先制作一個副本( copy_term/2 )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM