2017-10-06 4 views
6

में आंशिक मूल्यांकन कार्यान्वित करना मैं प्रोलॉग प्रश्नों के लिए आंशिक मूल्यांकनकर्ता लिख ​​रहा हूं। मैं एक प्रश्न expand_goal/2 का उपयोग कर विस्तार करने के लिए कोशिश की, लेकिन यह केवल इस मामले में Output साथ Input सम्मिलित है:एसडब्ल्यूआई-प्रोलॉग

:- initialization(main). 
main :- 
    Input=is_between(1,A,3),expand_goal(Input,Output),writeln(Output). 
is_between(A,B,C) :- 
    B>A,B<C. 

मैं भी term_expansion/2 उपयोग करने की कोशिश, लेकिन यह विफल कार्यक्रम का कारण बनता है:

:- initialization(main). 
main :- 
    Input=is_between(1,A,3),term_expansion(Input,Output),writeln(Output). 
is_between(A,B,C) :- 
    B>A,B<C. 

क्या एसडब्ल्यूआई-प्रोलॉग में एक अंतर्निहित भविष्यवाणी है जो रनटाइम पर क्वेरी के मैक्रो-विस्तार को निष्पादित कर सकती है, जैसा कि मैंने यहां करने की कोशिश की थी?

उत्तर

4

यह का उपयोग कर एक Prolog खंड विस्तार करने के लिए संभव है निर्मित clause/2 विधेय:

:- initialization(main). 
main :- clause(is_between(1,2,3),B),writeln(B). 
is_between(A,B,C) :- A<B,C>B. 

यह उदाहरण प्रिंट 1<2,3>2