2010-11-14 10 views
5

मैं अंतर्निहित अंकगणितीय ऑपरेटरों की तरह कुछ ढूंढ रहा हूं जिसमें Prolog (विशेष रूप से SWI-Prolog में) में वापसी मूल्य है। जैसे यदि आप A is (1+2) + (3+2). चलाते हैं, तो यह A = 8. देता है।कस्टम प्रोलॉग अंकगणितीय फ़ंक्शन

+ ऑपरेटर जैसे कुछ करने के लिए मैं func ऑपरेटर को कैसे परिभाषित कर सकता हूं?
उदा। A is (2 func 3) func (4 func (2+1)).

उत्तर

6

आदेश सिर्फ + ऑपरेटर के रूप में (कई अन्य लोगों के साथ) अपने कार्य func इनलाइन बैठाना के लिए, आपको func के लिए एक पूर्वता क्रम निर्धारित करने होंगे और यह तर्क है। आप इसे op/3 के साथ एसडब्ल्यूआई-पोलॉग में प्राप्त कर सकते हैं।

उदाहरण के लिए, निर्देश (जहां func/2 प्रयोग किया जाता है कोड पूर्ववर्ती):

:- op(500,yfx,func). 

func/2 लागू करने के लिए, आप या तो अपनी भाषा (यानी के लिए एक मेटा-दुभाषिया लिख ​​सकते हैं, तो आप एक PROLOG प्रोग्राम है जो पार्स बारे में func सहित अवधि भाव और उन्हें व्याख्या के रूप में आप चाहें तो), या यदि func/2 सख्ती से गणित है, तो आप arithmetic_function/1 भी इस प्रकार का उपयोग कर सकते एक निर्देश के रूप में:

:- arithmetic_function(func/2). 

func/2 के लिए निम्नलिखित परिभाषा के साथ इस परीक्षण:

func(X, Y, Z) :- 
    Z is X + Y. 

, देता है अपने उदाहरण के साथ:

?- A is (2 func 3) func (4 func (2+1)). 
A = 12. 
+0

अब एसडब्ल्यूआई प्रोलॉग के मैनुअल में यह कहता है कि यह निर्देश बहिष्कृत है, एक अद्यतन समाधान कैसे होगा? टीएक्स –

+0

यह सुनिश्चित करें कि इसे क्यों हटा दिया गया था, [जनवरी विएलेमेकर] (https://github.com/JanWielemaker) से पूछने के लिए सबसे अच्छा है अगर आपको वास्तव में जानना आवश्यक है। मेरी समझ यह है कि यह अभी भी काम करता है, भले ही इसे बहिष्कृत किया गया हो ... क्या मैं गलत हूं? – sharky

2

यह मैनुअल में है, arithmetic_function/1 जो कुछ is समझ सकता हूँ में अपने संबंध को बढ़ा देंगे,

देखना
http://www.swi-prolog.org/pldoc/doc_forobject=section(2,'4.26',swi('/doc/Manual/extendarith.html')) 
संबंधित मुद्दे