2009-04-16 16 views
6

में एंट (या एनएएनटी) अपने लेख The Nature of Lisp में, स्लावा अख्मेचेट लोगों को उदाहरण के रूप में चींटी/एनएएनटी का उपयोग करके लुप्त करने के लिए पेश करता है। क्या लिप में चींटी/एनएएनटी का कार्यान्वयन है? चीजों को परिभाषित करने के लिए, आप xml के बजाय वास्तविक लिस्प कोड का उपयोग कर सकते हैं? मुझे NANT में जोड़ों को बनाने के साथ सौदा करना पड़ा है, और स्लाव शो किए जाने के तरीके में एक्सएमएल सिस्टम को बाईपास करने के लिए एक तरीका की कामना की है।लिस्प

उत्तर

12

चींटी एक ऐसा प्रोग्राम है जो कुछ एक्सएमएल भाषा में लिखे गए आदेशों का अर्थ देता है। आप अपने उत्तर में वर्णित जस्टिनज के रूप में कुछ एक्सएमएल पार्सर (जैसा कि उल्लिखित XMLisp की तरह) का उपयोग कर सकते हैं और एक्सएमएल विवरण को किसी प्रकार के लिस्प डेटा में परिवर्तित कर सकते हैं और फिर लिस्प में अतिरिक्त कोड लिख सकते हैं। आपको कुछ चींटी व्याख्याओं को फिर से लागू करने की आवश्यकता है।

लिस्प में चींटी की अधिकांश प्राचीन चीजों की आवश्यकता नहीं है। कुछ फ़ाइल ऑपरेशंस बिस्प में निर्मित हैं (हटाएं-फ़ाइल, नाम बदलें-फ़ाइल, जांच-फ़ाइल, ...)। कुछ गायब हैं और इसे लागू करने की आवश्यकता है - वैकल्पिक आप मौजूदा पुस्तकालयों में से एक का उपयोग कर सकते हैं। यह भी ध्यान रखें कि आप Lisp फ़ाइलों को लिस्प में लोड कर सकते हैं और कोड निष्पादित कर सकते हैं - आरईपीएल भी है - इसलिए यह पहले से ही एक इंटरैक्टिव फ्रंटएंड (जावा के विपरीत) के साथ आता है।

आम लिस्प में उच्च स्तरीय बिल्ड सिस्टम आमतौर पर 'सिस्टम' नामक एक अमूर्त क्रियान्वयन कर रहे हैं। उनमें से कई हैं। एएसडीएफ एक लोकप्रिय विकल्प है, लेकिन अन्य भी हैं। एक सिस्टम उपप्रणाली और फाइलें है। एक प्रणाली में कुछ विकल्प भी हैं। इसके घटकों में विकल्प भी हैं। एक प्रणाली में या तो घटकों का संरचनात्मक वर्णन होता है, निर्भरताओं का विवरण, या 'क्रियाओं' और उनकी निर्भरताओं के एक प्रकार का वर्णन होता है। आम तौर पर इन चीजों को ऑब्जेक्ट उन्मुख तरीके से कार्यान्वित किया जाता है और आप 'क्रिया' को लिस्प (सामान्य) कार्यों के रूप में कार्यान्वित कर सकते हैं। लिस्प भी COMPILE-FILE जैसे कार्यों को लाता है, जो फ़ाइल को संकलित करने के लिए लिस्प कंपाइलर का उपयोग करेगा। यदि आपके कोड में, सी फाइलें हैं, तो आपको सी संकलक को कॉल करने की आवश्यकता होगी - आम तौर पर कुछ कार्यान्वयन विशिष्ट फ़ंक्शन के माध्यम से जो बाहरी प्रोग्राम (यहां सी कंपाइलर) को कॉल करने की अनुमति देता है।

जैसा कि, dmitry-vk द्वारा उल्लिखित, ASDF एक लोकप्रिय विकल्प है। LispWorks Common Defsystem प्रदान करता है। एलेग्रो सीएल का अपना डेफिसस्टम है। इसका DEFSYSTEM manual यह भी वर्णन करता है कि इसे कैसे विस्तारित किया जाए।

सभी लिस्प समाधान कुछ प्रकार के लिस्प सिंटैक्स (एक्सएमएल सिंटैक्स नहीं) का उपयोग कर रहे हैं, आमतौर पर सिस्टम का वर्णन करने के लिए मैक्रो द्वारा कार्यान्वित किया जाता है। एक बार जब लिस्प में पढ़ा जाता है, तो यह डेटा प्रतिनिधित्व में बदल जाता है - अक्सर सिस्टम, मॉड्यूल इत्यादि के लिए सीएलओएस उदाहरणों के साथ .. क्रियाएं तब भी लिस्प फ़ंक्शन होती हैं। कुछ उच्च-आदेश फ़ंक्शंस तब घटक ग्राफ़/पेड़ पर चलते हैं और आवश्यक कार्यों को निष्पादित करते हैं। कुछ अन्य उपकरण घटक ग्राफ़/पेड़ पर चलते हैं और कार्यों के लिए एक प्रतिनिधित्व वापस करते हैं - जो तब प्रस्तावित योजना - उपयोगकर्ता तब लिस्प को पूरी योजना या योजना के कुछ हिस्सों को निष्पादित करने दे सकता है।

एक लिस्प मशीन पर एक सरल प्रणाली विवरण इस प्रकार है:

(sct:defsystem scigraph 
    (:default-pathname "sys:scigraph;" 
    :required-systems "DWIM") 
    (:serial "package" "copy" "dump" "duplicate" "random" 
      "menu-tools" "basic-classes" "draw" "mouse" 
      "color" "basic-graph" "graph-mixins" "axis" 
      "moving-object" "symbol" "graph-data" "legend" 
      "graph-classes" "present" "annotations" "annotated-graph" 
      "contour" "equation" "popup-accept" "popup-accept-methods" 
      "duplicate-methods" "frame" "export" "demo-frame")) 

ऊपर एक प्रणाली SCIGRAPH परिभाषित करता है और सभी फ़ाइलों को धारावाहिक क्रम में संकलित और लोड किया जाना चाहिए। मैं सॉफ्टवेयर लोड और अब तक केवल इस फ़ाइल को बदल -

 
Command: Compile System (a system [default Scigraph]) Scigraph (keywords) 
         :Simulate (compiling [default Yes]) Yes 

    The plan for constructing Scigraph version Newest for the Compile 
     operation is: 
    Compile RJNXP:>software>scigraph>scigraph>popup-accept-methods.lisp.newest 
    Load RJNXP:>software>scigraph>scigraph>popup-accept-methods.ibin.newest 

यह एक फ़ाइल संकलन और इसे लोड होगा:

अब मैं देख सकता हूँ लिस्प मशीन संकलित कोड को अद्यतन करने के क्या करेंगे।

एएसडीएफ के लिए क्लाइकी पेज पर उल्लिखित दस्तावेज देखें - यह थोड़ा अलग काम करता है।

+0

जवाब देने के लिए समय बिताने के लिए धन्यवाद! मुझे लगता है कि चींटी के साथ मेरा सबसे बड़ा गोमांस यह है कि चूंकि यह एक्सएमएल का उपयोग कर रहा है, इसलिए मैं कुछ संचालन करने के लिए सीधे अंतर्निहित भाषा की शक्ति का उपयोग नहीं कर सकता। एक्सएमएल पक्ष में "पोर्ट" किए गए केवल ऑपरेशन (फ़ंक्शंस) उपलब्ध हैं। लिस्प के साथ लागू प्रणाली में जो सौंदर्य मैं देखता हूं वह यह है कि सभी लिस्प उपलब्ध होंगे, मूल कार्यों के लिए एक्सएमएल रैपर बनाने की आवश्यकता नहीं है। – Daniel

1

शायद आप चीजों को लिप में परिभाषित कर सकते हैं और उन्हें उस बिंदु पर एक्सएमएल में परिवर्तित कर सकते हैं जब आप उन्हें NANT पर भेजते हैं।

XMLisp जैसे कुछ दो प्रस्तुतियों के बीच आगे और आगे जाना आसान बनाता है।

संपादित करें: वास्तव में, xml-emitter अधिक समझ में आएगा।

+0

लेख जो लाया गया था वह यह था कि एक्सएमएल मेटा भाषा थी, जिसने आपको वास्तव में कार्यान्वयन भाषा का उपयोग करने में सक्षम होने से रोका। यदि चींटी का उपयोग करके चींटी/एनएएनटी लागू किया गया था, तो आप प्रत्येक नोड में लिस्प की सभी शक्तियों का उपयोग कर सकते हैं ... जो बहुत आकर्षक लगता है! – Daniel

+0

यह सच है, और मुझे लगता है कि स्कॉन्स इसका एक उदाहरण है, क्योंकि आप उस बिल्ड सिस्टम में आर्बिटरी पायथन चला सकते हैं। दूसरी ओर मुझे लगता है कि बिल्डिंग बनाने के लिए संक्षिप्त और अभिव्यक्तिपूर्ण भाषाओं का विकास करने वाले परिपक्व निर्माण प्रणालियों, और जाम, जो एक लिस्प चींटी के विचार को कम उपयोगी बनाते हैं। – justinhj

1

कॉमन लिस्प की एएसडीएफ (एक और सिस्टम परिभाषा सुविधा) मेक/चींटी के समान है (लेकिन पूर्ण एनालॉग नहीं - इसका लक्ष्य लिस्प प्रोग्राम बनाने के लिए है, न कि जेनेरिक सिस्टम जैसे बनाना या चींटी)। यह लिस्प कोड (सबक्लासिंग सिस्टम, घटकों, सिस्टम में संचालन जोड़ने) के साथ एक्स्टेंसिबल है। उदाहरण के लिए, एक asdf-ecs एक्सटेंशन है जो सी स्रोत फ़ाइलों को सिस्टम में शामिल (और संकलित) करने की अनुमति देता है।

4

स्टुअर्ट हेलोवे की आगामी पुस्तक Programming Clojure एक पुस्तक ऐप के रूप में पूरे पुस्तक में Lancet के निर्माण के माध्यम से जाती है। लांसेट एक क्लोजर बिल्ड सिस्टम है जो (वैकल्पिक रूप से) चींटी के साथ सीधे एकीकृत करता है। स्रोत कोड और उदाहरण available हैं।

यदि आप लिस्प कोड का उपयोग कर एंटी एक्सएमएल फाइलें उत्पन्न करना चाहते हैं, तो आप सामान्य लिस्प के लिए क्लोजर या CL-WHO के लिए clj-html जैसे कुछ का उपयोग कर सकते हैं। लिस्प एस-एक्सप से एक्सएमएल उत्पन्न करना मजेदार और आसान है।