2012-04-21 13 views
5

मैं SWI-Prolog में शर्तों की एक सूची कैसे प्रिंट करूं?सुंदर प्रिंट एक प्रोलॉग शब्द

मैं कोशिश की है:

portray_clause([term1, term2]).

लेकिन यह है कि सिर्फ एक लंबी धारा में बाहर लिखते हैं और एक तार भी ASCII वर्ण कोड की एक सूची के रूप में बाहर आता है - मैं कहाँ करना चाहते हैं "abc" होने के लिए मुद्रित।

उत्तर

1

यहां एक संकेत है .. तारों और परमाणुओं के बीच अंतर देखें .. आपको शायद स्ट्रिंग्स के रूप में चीजों को पकड़ने की आवश्यकता है यदि आप उन्हें स्ट्रिंग के अलग-अलग वर्णों का विश्लेषण करने के लिए अलग करना चाहते हैं। nth0 या nth1 का उपयोग कर। अन्यथा, परमाणु अधिकांश चीजों के लिए ठीक काम करते हैं/आसानी से छेड़छाड़ की जा सकती है।

?- write(["a", "b", "c"]). 
[[97],[98],[99]] 
true. 

?- write(['a','b','c']). 
[a,b,c] 
true. 
+0

(कहा जाना चाहिए .. पहली सूची में स्ट्रिंग्स, दूसरा परमाणु शामिल हैं) – magus

3

यह एसडब्ल्यूआई में लगातार समस्या है। डिफ़ॉल्ट रूप से "एबीसी" वर्ण कोड की एक सूची है, इस प्रकार इसे मुद्रित किया गया है:

 
?- Xs = "abc". 
Xs = [97, 98, 99]. 

क्या इसे आसानी से परिवर्तित किया जा सकता है? कल्पना कीजिए कि आपके पास दूरी की एक सूची थी जो 9 7, 98, और 99 होने के लिए होती है। उस स्थिति में एक स्ट्रिंग उत्तर के रूप में बहुत भ्रामक होगी। इसलिए, आपकी समस्या का कोई साफ समाधान नहीं है, जब तक स्ट्रिंग-नोटेशन का मतलब सूची-चरित्र-चरित्र कोड है!

आप वर्ण जो लंबाई 1 के परमाणुओं की एक सूची के लिए "abc" के अर्थ बदल सकते हैं:

 
?- set_prolog_flag(double_quotes,chars). 
true. 

?- Xs = "abc". 
Xs = [a, b, c]. 

आप इससे खुश हैं, तो आप library(double_quotes) उपयोग कर सकते हैं।

 
?- use_module(library(double_quotes)). 
true. 
?- Xs = "abc". 
Xs = "abc". 

अधिक के लिए, this thread देखें।

+1

तारों को प्रिंट करने के लिए यह एक अच्छा जवाब है, लेकिन मैंने इसे एक उत्तर के रूप में चिह्नित नहीं किया है क्योंकि चित्रण खंड अभी भी सुंदर प्रिंट शर्तों नहीं है भले ही उनमें तार बेहतर हो। – codeshot

संबंधित मुद्दे