Prolog Language
उच्च-क्रम प्रोग्रामिंग
खोज…
कॉल / एन भविष्यवाणी करता है
प्रेडिकेट्स का call/N
परिवार रन समय में मनमाना प्रोलॉग लक्ष्य कह सकता है:
?- G=true, call(G).
true.
?- G=(true,false), call(G).
false.
maplist / [2,3]
maplist/2
और maplist/3
उच्च-श्रेणी के विधेय हैं, जो ऐसे तत्वों की सूचियों के लिए एक एकल तत्व के बारे में एक विधेय की परिभाषा को उठाने की अनुमति देते हैं। इन विधेयकों को call/2
और call/3
का उपयोग करके बिल्डिंग ब्लॉक्स और कई प्रोलॉग सिस्टम के साथ जहाज के रूप में परिभाषित किया जा सकता है।
उदाहरण के लिए:
?- maplist(dif(a), [X,Y,Z]).
dif(X, a),
dif(Y, a),
dif(Z, a).
मेटा-कॉल
प्रोलॉग में, तथाकथित मेटा-कॉल एक अंतर्निहित भाषा सुविधा है। सभी Prolog कोड को Prolog शब्दों द्वारा दर्शाया जाता है, जिससे लक्ष्यों को गतिशील रूप से निर्माण किया जा सकता है और अतिरिक्त विधेयकों के बिना अन्य लक्ष्यों की तरह उपयोग किया जा सकता है:
?- Goal = dif(X, Y), Goal.
dif(X, Y).
इस तंत्र का उपयोग करते हुए, अन्य उच्च-क्रम के विधेय को प्रोलॉग में ही परिभाषित किया जा सकता है।
foldl / 4
एक तह (बाएं से) एक उच्च-क्रम संबंध है:
- 3 तर्कों के साथ एक विधेय
- तत्वों की एक सूची
- एक प्रारंभिक अवस्था
- एक अंतिम स्थिति, जो मध्यवर्ती राज्यों के माध्यम से ले जाने के दौरान उत्तराधिकारी तत्वों को लागू करने का परिणाम है।
उदाहरण के लिए: दो तत्वों के योग को परिभाषित करने के लिए बिल्डिंग ब्लॉक के रूप में एक विधेय का उपयोग करते हुए सूची में सभी तत्वों के योग को व्यक्त करने के लिए foldl/4
का उपयोग करें:
?- foldl(plus, [2,3,4], 0, S).
S = 9.
लक्ष्यों की सूची को कॉल करें
लक्ष्यों की एक सूची को कॉल करने के लिए जैसे कि यह लक्ष्यों का संयोजन था, उच्च-क्रम की भविष्यवाणी को कॉल / 1 और मैपिंग / 2 पर संयोजित करें:
?- Gs = [X = a, Y = b], maplist(call, Gs). Gs = [a=a, b=b], X = a, Y = b.