2012-11-22 52 views
15

मैं कुछ प्रस्तावना पर काम कर रहा हूं कि मैं नया हूं।प्रोलॉग "या" ऑपरेटर, क्वेरी

मैं एक "या" ऑपरेटर

registered(X, Y), Y=ct101, Y=ct102, Y=ct103. 

की तलाश में हूँ यहाँ मेरी क्वेरी है। क्या मैं लिखना चाहते हैं कोड है कि करेंगे:

"वापसी एक्स, यह देखते हुए कि Y मान Z या मूल्य क्यू या मूल्य पी के बराबर है"

मैं वापस जाने के लिए एक्स अगर वाई के बराबर है यह पूछ रहा हूँ हालांकि सभी 3। यहाँ या ऑपरेटर क्या है? क्या कोई है?

उत्तर

9

आप Y पर इस तरह से 'आह्वान' कर सकते हैं विकल्प बाइंडिंग:

...registered(X, Y), (Y=ct101; Y=ct102; Y=ct103). 

नोट कोष्ठक सही निष्पादन नियंत्रण प्रवाह बनाए रखने के लिए आवश्यक हैं। ;/2 यह सामान्य or ऑपरेटर है। अपने सीमित उपयोग के लिए आप कर सकते थे और साथ ही विकल्प अधिक मुहावरेदार

...registered(X, Y), member(Y, [ct101,ct102,ct103]). 

कि बैक ट्रैकिंग पर करने के लिए Y बांधता सूची में से प्रत्येक सदस्य।

संपादित करें मुझे आपकी आखिरी आवश्यकता में देरी हुई। यदि आप चाहते हैं कि वाई मैच सभी 3 मूल्यों या है अनुचित, बजाय

...registered(X, ct101), registered(X, ct102), registered(X, ct103). 

या अधिक कॉम्पैक्ट

...findall(Y, registered(X, Y), L), sort(L, [ct101,ct102,ct103]). 

findall/3 का निर्माण सूची बहुत उसी क्रम कि पंजीकृत में उपयोग/2 सफल फिर मैं मिलान सुनिश्चित करने के लिए सॉर्ट का उपयोग करता हूं।

...setof(Y, registered(X, Y), [ct101,ct102,ct103]). 

/3 setof भी परिणाम सूची

+0

धन्यवाद, यह एक टन मदद की। मुझे यकीन नहीं था कि इसके बारे में कैसे जाना है, लेकिन मैं बाइंडिंग और बैकट्रैकिंग पर पढ़ने जा रहा हूं। की सराहना की! – Eogcloud

23

बस एक और दृष्टिकोण क्रमबद्ध करता है।

registered(X, Y) :- 
    X = ct101; X = ct102; X = ct103. 

पूरा विवरण दिया गया के लिए:: प्रदर्शन कर "or" Prolog में भी "असंबद्ध" ऑपरेटर या अर्द्ध बृहदान्त्र साथ किया जा सकता

Predicate control in Prolog

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

  • कोई संबंधित समस्या नहीं^_^