2015-08-11 3 views
5

क्या इसके ./2 प्रारूप में प्रोलॉग सूची प्रदर्शित करना संभव है, उदा।अपनी 'कच्ची' में एक सूची प्रदर्शित करें ./2 प्रारूप

सूची के लिए

:

L = .(a, .(b, .(c, []))). 
+3

किसी भी आईएसओ-अनुरूप प्रणाली में 'write_canonical/1' देखें! 'write_canonical/1' हर बार जब आप तर्कसंगत शब्दों के बारे में संदेह करते हैं तो आपको बहुत ही उपयोगी लगता है। एसआईसीस्टस प्रोलॉग के साथ उदाहरण: '? - write_canonical ([ए, बी, सी])। ', Yieding:' '।' (ए, '।' (बी, '। (सी, [])))। डेटा एक्सचेंज के लिए भी बहुत मूल्यवान भविष्यवाणी, जिसका उद्देश्य वास्तव में कैननिकल प्रतिनिधित्व उत्पन्न करना है जो पार्स करना आसान है। – mat

+2

एल = [ए, बी, सी], write_canonical (एल)। एक इलाज किया! मैं इस समय sicstus का उपयोग कर रहा हूँ, कभी-कभी घर पर swi। मुझे आश्चर्य है कि एक ही अंत प्राप्त करने के लिए कोई अन्य साधन हैं? – bph

+3

'write_canonical/1' इसे करने का मानक और सबसे अच्छा तरीका है। आप निश्चित रूप से 'Arg/3', '= ../2' आदि के साथ शब्द निरीक्षण और अपघटन का उपयोग करके स्वयं को कार्यान्वित कर सकते हैं। – mat

उत्तर

4

आम तौर पर, write_canonical(List) या ?- write_term(List, [quoted(true), ignore_ops(true)]) के रूप में टिप्पणी में कहा,:

| ?- L=[a,b,c]. 
L = [a,b,c] ? 
yes 

वहाँ प्रदर्शित करने के लिए एक साधन है। चूंकि SWI-Prolog do things differently करने का फैसला किया, यह काफी अच्छा नहीं है:

?- write_canonical([a]). 
[a] 
true. 

?- write_term([a], [quoted(true), ignore_ops(true)]). 
[a] 
true. 

?- write_term([a], [dotlists(true)]). 
.(a,[]) 
true. 

documentation on write_term/2 देखें, विकल्प brace_terms(Bool) और dotlists(Bool) पर ध्यान देना। लेकिन सावधान रहें: यदि आप सामान्य रूप से एसडब्ल्यूआई-प्रोलॉग 7 शुरू करते हैं, तो ./2 सूची फ़ैक्टर नहीं है!

?- L = .(a, []). 
ERROR: Type error: `dict' expected, found `a' (an atom) % WHAT? 

?- L = '[|]'(a, []). 
L = [a]. 

आप swipl --traditional के साथ शुरू करते हैं, बातें फिर से सामान्य हो, एक तरह से कर रहे हैं:

$ swipl --traditional 
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 7.3.4-32-g9311e51) 
Copyright (c) 1990-2015 University of Amsterdam, VU Amsterdam 
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software, 
and you are welcome to redistribute it under certain conditions. 
Please visit http://www.swi-prolog.org for details. 

For help, use ?- help(Topic). or ?- apropos(Word). 

?- L = .(a, []). 
L = [a]. 

तुम अब भी write_canonical(List) या write_term(List, [quoted(true), ignore_ops(true)]) उपयोग नहीं कर सकते।

विवरण और तर्क के लिए एसडब्ल्यूआई-प्रोलॉग दस्तावेज़ के लिंक किए गए अनुभाग को पढ़ें। एक सलाह के रूप में, यदि आप SWI-Prolog 7 को डिफ़ॉल्ट रूप से SWI-Prolog 7 में उपयोग करने का निर्णय लेते हैं और केवल write_term(List, [dotlists(true)]) का उपयोग करते हैं, तो आपको किसी अन्य Prolog कार्यान्वयन के साथ संवाद करने की आवश्यकता है। सामान्य सूची नोटेशन, [a, b, ...] अधिकांश पारंपरिक स्थितियों में काफी अच्छा होना चाहिए।

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