prolog - हिलेग में शब्द(एक्सएसबी) प्रोलॉग



iso-prolog xsb (1)

एक्सएसबी के भीतर, हिलेग शब्द बहुत मोटे तौर पर मॉड्यूल सिस्टम से जुड़े हैं जो एक्सएसबी के लिए अद्वितीय है। एक्सएसबी के पास फैक्टर्स आधारित मॉड्यूल सिस्टम है। यही है, एक ही क्षेत्र की length(X) एक मॉड्यूल का हो सकता है, जबकि length(L, N) दूसरे का हो सकता है परिणामस्वरूप, call(length(L), N) एक मॉड्यूल और call(length(L, N)) को दूसरे में भेज सकता है:

[Patch date: 2013/02/20 06:17:59]
| ?- use_module(basics,length/2).
yes
| ?- length(Xs,2).             
Xs = [_h201,_h203]
yes
| ?- call(length(Xs),2).
Xs = [_h217,_h219]
yes
| ?- use_module(inex,length/1). 
yes
| ?- length(Xs,2).
Xs = [_h201,_h203]
yes
| ?- call(length(Xs),2).
++Error[XSB/Runtime/P]: [Existence (No module inex exists)]  in arg 1 of predicate load
| ?- call(call(length,Xs),2).
Xs = [_h228,_h230];

ऐसा हो सकता है कि इस संदर्भ में call/N और हिलेग शब्दों के बीच अंतर हो। मेरे पास, हालांकि, अभी तक कोई नहीं मिला

ऐतिहासिक रूप से, हिल्ग शब्द 1 9 87-198 9 को पेश किए गए हैं उस समय में, call/N पहले से ही एनयू में बिल्ट-इन के रूप में अस्तित्व में था और क्वांटस प्रोलॉग में library(call) में केवल सरसरी दस्तावेज के साथ । इसे रिचर्ड ओकीफे द्वारा 1984 का प्रस्ताव दिया गया है। दूसरी ओर, call/N Hilog के लेखकों के लिए स्पष्ट रूप से अज्ञात था, जैसा कि पी। 1101 की पीई 1 9 01 में वीडोंग चेन, माइकल किफर, डेविड स्कॉट वॉरेन: हायलॉग: हायर-ऑर्डर लॉजिक प्रोग्रामिंग कन्स्ट्रक्ट्स के लिए फर्स्ट ऑर्डर सिमेंटिक्स। एनएसीएलपी 1989. 10 9 0-1114 एमआईटी प्रेस।

... प्रोक्रॉल में जेनेरिक पारगमन बंद भी परिभाषित किया जा सकता है:

    closure(R, X, Y) :- C =.. [R, X, Y], call(C).
    closure(R, X, Y) :- C =.. [R, X, Z], call(C), closure(R, Z, Y). 

हालांकि, यह स्पष्ट रूप से हायलॉग (धारा 2.1 देखें) की तुलना में अनन्य है, क्योंकि इसमें एक सूची से बाहर शब्द बनाने और "कॉल" का उपयोग करके इस शब्द को एक परमाणु सूत्र में दर्शाया गया है। इस उदाहरण का मुद्दा यह है कि प्रोलोग में उच्च-क्रम के निर्माण के सैद्धांतिक आधारों की कमी एक अस्पष्ट सिंटैक्स के रूप में हुई, जो आंशिक रूप से बताती है कि ऐसे रचनाओं से जुड़े प्रोलॉग कार्यक्रमों को समझना मुश्किल है।

अब, यह call/N साथ ऐसा किया जा सकता है:

closure(R, X, Y) :- call(R, X, Y).
closure(R, X, Y) :- call(R, X, Z), closure(R, Z, Y).

जो (=..)/2 संस्करण से भी अधिक सामान्य है क्योंकि R अब एक परमाणु होने तक सीमित नहीं है। एक तरफ, मैं लिखना पसंद करता हूं:

closure(R_2, X0,X) :- call(R_2, X0,X1), closure0(R_2, X1,X).

closure0(_R_2, X,X).
closure0(R_2, X0,X) :- call(R_2, X0,X1), closure0(R_2, X1,X).

क्या हिल्ग शब्द हैं (यानी यौगिकों को मनमानी शब्दों के रूप में जाना जाता है) अब भी XSB Prolog (या किसी अन्य Prolog) में एक शक्तिशाली विशेषता के रूप में माना जाता है? क्या कई एक्सएसबी परियोजनाएं इस सुविधा का उपयोग कर रही हैं? उदाहरण के लिए उनमें से कौन?

जब तक मैं समझता हूं कि उच्चतर आज्ञाकारी प्रोग्रामिंग आईएसओ निर्मित-इन कॉल / एन का उपयोग करना उतना ही संभव है I

विशेष रूप से, मैं यह समझना चाहूंगा कि यदि XSB ऐतिहासिक कारणों से ही हिलेग शब्द का उपयोग कर रहा है या अगर हिलेग के शब्दों का मौजूदा आईएसओ मानक के मुकाबले काफी फायदे हैं