2014-06-23 7 views
5

मैं प्रोलॉग का उपयोग करके एक छोटा टेक्स्ट-आधारित साहसिक गेम लिखना चाहता हूं (यह एक बेवकूफ विचार हो सकता है लेकिन मैं इस पर चर्चा करने के लिए यहां नहीं हूं)।प्रोलॉग में "सत्य" और "झूठी" आउटपुट कैसे बंद करें?

एकमात्र समस्या यह है कि मैं "सत्य" और "झूठे" मानों के बिना स्क्रीन पर पाठ मुद्रित करने का प्रबंधन नहीं कर सकता।

?- take(desk). 
    This thing is way too heavy for me to carry! 
    true. 

मैं इस से छुटकारा पाने के कर सकते हैं:

take(desk) :- write('This thing is way too heavy for me to carry!'). 

जहां take एक एक ही स्थान पर विधेय और desk एक नाम मैं एक आउटपुट के रूप में मिलता है:

उदाहरण के लिए अगर मैं की तरह कुछ कोशिश "सच" या "झूठा" आउटपुट?

बस ऐसे ही मैं भी साधारण पाठ उत्पादन के लिए एक ही स्थान पर format/1 विधेय और भी format/2 दो जगह विधेय के साथ की कोशिश की उल्लेख करने के लिए (जब मैं उत्पादन के लिए एक चर के नाम चाहते हैं), लेकिन यह वास्तव में एक ही समस्या देता है।

मैंने this answer भी देखा है, लेकिन पहले यह पर्याप्त नहीं है (कम से कम मेरे जैसे किसी के लिए नहीं) और दूसरा, मुझे उम्मीद है कि यह करने के लिए एक आसान तरीका है।

और अंत में, मैं एसडब्ल्यूआई-प्रोलॉग का उपयोग कर रहा हूं।

धन्यवाद।

+0

मैं सबसे अच्छा प्रोलॉग नौसिखिया हूं, लेकिन यदि आप '--quiet' /' -q' स्विच का उपयोग करते हैं, तो क्या यह काम करता है? स्रोत: http://www.swi-prolog.org/pldoc/doc_for?object=section(2,+%272.4%27,+swi(%27/doc/Manual/cmdline.html%27)) – Gray

+0

@ ग्रे । हो सकता है कि मैं इसे सही तरीके से उपयोग न करें लेकिन मूल रूप से यदि मैं 'prolog -q game.pl' लॉन्च करता हूं, तो यह काम नहीं करता है। – gatsu

उत्तर

9

एक सरल तरीका आपके लिए थोड़ा आरईपीएल (पढ़ना, मूल्यांकन करना, प्रिंट लूप) बनाना होगा। इस तरह कुछ:

game :- 
    repeat, 
    write('> '), 
    read(X), 
    call(X), 
    fail. 

यह आपके द्वारा जो भी दर्ज किया गया है उसे तुरंत संकेत और निष्पादित करेगा। अपने take तथ्य के साथ संयोजन के रूप में (और एक अन्य मैं उदाहरण के लिए जोड़ा):

take(desk) :- write('This thing is way too heavy for me to carry!'), nl. 
take(chair) :- write('This is easier to carry.'), nl. 

आप मिल जाएगा:

?- game. 
> take(desk). 
This thing is way too heavy for me to carry! 
> take(chair). 
This is easier to carry. 
> 

आप true या false क्योंकि game लक्ष्य का समाधान नहीं होता नहीं मिलता है जब तक आप किसी भी तरह से लूप से बाहर निकलें। आप quit या bye या game लूप से बाहर निकलने के लिए जो भी चेक जोड़ सकते हैं। लूप को निरस्त करने के लिए Ctrl-C या Ctrl-D का भी उपयोग किया जा सकता है। आपको अपनी ज़रूरतों को पूरा करने या पसंद करने के लिए कुछ अन्य "विशेषताओं" को जोड़ने की आवश्यकता हो सकती है।

+0

यह एक अद्भुत जवाब है और उस पर सबसे सरल है !! अब, मुझे थोड़ी सी समस्या है क्योंकि मैं चीजों के लिए गतिशील भविष्यवाणियों का उपयोग कर रहा हूं। उनमें से एक 'इन्वेंट्री (एक्स)' कहता है जिसका मतलब है कि एक्स मेरी सूची में है। इसके लिए खाते में, मैं 'टेक' अनुमान को निम्नानुसार लेता हूं (एक्स): - दृश्यमान (एक्स), लिखें ('किया गया'), जोर दें (सूची (एक्स)), पीछे हटें (दृश्यमान (एक्स)); सूची (एक्स), लिखें ('मैंने इसे पहले से लिया है') '। मेरी समस्या यह है कि जब आप लूप में बुलाए जाते हैं तो आपने प्रस्तावित किया है कि 'ले लें (एक्स)' उनके सच्चे मूल्यों (जो यह लूप के बाहर नहीं करता) के बावजूद संयोजन में दो प्रस्तावों को आउटपुट करता है। ऐसा क्यों है? – gatsu

+0

ठीक है मेरे बुरे, मुझे अभी एहसास हुआ है कि इस क्रम में लिखा गया है यानी।पहले (दृश्यमान -> सूची) और फिर सूची ऑब्जेक्ट दिखाई देने पर पूरी तरह से संयोजन को सही बना देगा। अगर मैं दो प्रीमियर स्वैप करता हूं तो ऐसा नहीं होना चाहिए। – gatsu

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