प्रश्नों में अनावश्यक लक्ष्यों का उपयोग


12

( @Repeat के सुझाव पर ) एक शुद्ध कार्यक्रम की एक क्वेरी पर विचार करें 1 ?- G_0. यदि कोई प्रश्न होगा तो क्या उपयोग होगा ?- G_0, G_0.?

फ़ुटनोट्स
1 कोई टैब्लिंग (सुरक्षित होने के लिए), बाधाएँ ठीक हैं। विषय पर
पिछली पोस्ट


परिणामों की संख्या बढ़ रही है?
विलेम वैन ओन्सेम

1
मैं यह मानता हूं कि लक्ष्य के लगातार चलने से कोई भी राज्य की जानकारी संरक्षित नहीं है। दूसरे शब्दों में, प्रश्न की भिन्नता की अनुमति नहीं है, उदाहरण ?- G_0(State), G_0(State).के लिए, पहले लक्ष्य से दूसरे लक्ष्य तक परिणाम पर कोई राज्य पारित नहीं किया जा रहा है?
गाइ कोडर

1
G_0कोई भी (शुद्ध) लक्ष्य हो सकता है, सहित, कहते हैंG_0 = append(Xs,Ys,Zs)
झूठा

1
@GuyCoder: संयोजन की आवश्यकता है। ( G_0;G_0एक साइड इफेक्ट्स या परफॉरमेंस / कैशिंग / टैबलिंग मुद्दों का परीक्षण कर सकते हैं)
झूठा

1
BTW, के बजाय G_0(State),G_0(State)एक लिखते हैंcall(G_1,State), call(G_1,State)
झूठी

जवाबों:


3

क्वेरी ?- G_0, G_0.निरर्थक उत्तरों की पहचान करने में मदद करती है?- G_0.

इसलिए इसके बारे में जवाब की संख्या की तुलना करने के लिए पर्याप्त होता है ऐसा करने के लिए ?- G_0.की उत्तरों की संख्या के साथ ?- G_0, G_0.। उन उत्तरों को संग्रहीत करने की आवश्यकता नहीं है (जो वैसे भी त्रुटियों का लगातार स्रोत है)। बस दो पूर्णांक पर्याप्त! यदि वे समान हैं, तो कोई अतिरेक नहीं है। लेकिन अगर ?- G_0, G_0.अधिक उत्तर हैं, तो कुछ अतिरेक है। यहाँ एक उदाहरण है:

p(f(_,a)).
p(f(b,_)).

?- p(X).
   X = f(_A, a)
;  X = f(b, _A).  % two answers

?- p(X), p(X).
   X = f(_A, a) 
;  X = f(b, a)
;  X = f(b, a)
;  X = f(b, _A).   % four answers
                   % thus p(X) contains redundancies

... और अब इसे ठीक करते हैं:

p(f(B,a)) :-
   dif(B, b).
p(f(b,_)).

?- p(X).
   X = f(_A, a), dif(_A, b)
;  X = f(b, _A).

?- p(X), p(X).
   X = f(_A, a), dif(_A, b), dif(_A, b).
;  X = f(b, _A).    % again two answers, thus no redundancy

मैन्युअल रूप से शामिल बाधाओं का निरीक्षण करने की आवश्यकता नहीं है।

इसे और बढ़ाया जा सकता है जब हम स्पष्ट रूप से केवल उपयोग कर रहे निरर्थक उत्तरों की खोज कर रहे हैं call_nth/2

?- G_0, call_nth(G_0, 2).

1

शुद्ध प्रोग्राम 1 की एक क्वेरी पर विचार करें? - G_0। यदि कोई क्वेरी का उपयोग करेगा? - G_0, G_0। है?

मुझे दूसरे लक्ष्य की कोई उपयोगिता नहीं दिखाई देती है, विशेष रूप से जब पूंछ पुनरावृत्ति अनुकूलन ( अंतिम कॉल अनुकूलन ) चालू है

जब क्वेरी संसाधनों-लालची और ऊपर के विकल्प बंद हो जाते हैं (उदाहरण के लिए जब डीबगिंग हो) तो मुझे GC समस्या (स्टैक / हीप ओवरफ़्लो) का एहसास हो सकता है ।

मुझे लगता है कि दूसरा कॉल निरर्थक (शुद्ध कार्यक्रम के लिए) है और इसे कंपाइलर द्वारा समाप्त किया जाना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.