वर्तमान में मेरे पास आम लिस्प में एक छोटा सा कार्यक्रम है, जिसे मैं एक शैल स्क्रिप्ट के रूप में चलाने के लिए चाहता हूं। मैं एसबीसीएल का उपयोग कर रहा हूं और इसके साथ पूरी तरह ठीक हूं इसलिए इस मंच पर रहना पसंद करेंगे। :)सीएल प्रोग्राम को शेल स्क्रिप्ट के रूप में बुलाए जाने पर quicklisp का उपयोग कैसे करें?
मुझे --script
विकल्प के बारे में पता है और यह (ql:quickload)
फ़ॉर्म को छोड़कर बेकार ढंग से काम करता है।
मेरा प्रोग्राम CL-FAD का उपयोग करता है, जो ql:quickload
के माध्यम से लोड होता है (मुझे लगता है कि मुझे यह उल्लेख करना चाहिए कि यह quicklisp से पैकेज लोडिंग फ़ंक्शन है)। जब स्क्रिप्ट
(ql:quickload :cl-fad)
प्रपत्र का मूल्यांकन करने के लिए चलाता है, यह अगले त्रुटि के साथ टूट जाता है:
package "QL" not found
कार्यक्रम ही स्रोत फ़ाइल, में पैक किया जाता है जो शीर्ष लेख निम्नलिखित है:
(defpackage :my-package
(:use :common-lisp)
(:export :my-main-method))
यह सरल स्वचालन निष्पादन योग्य है, इसलिए मैंने किसी भी एएसडीएफ सिस्टम को नहीं लिखने का फैसला किया (शायद गलती से)। यह एकल समारोह निर्यात करता है जिसे किसी भी तर्क के बिना चलाया जाना चाहिए।
इस कार्यक्रम के लिए मैं वर्तमान लांचर स्क्रिप्ट लिखने की कोशिश कर रहा हूँ, और यह है कि मैं क्या घूर रहा है:
#!/usr/bin/sbcl --script
(load "my-program.lisp")
(in-package :my-package)
(my-main-method)
इस तीन लाइनें (कुटिया गिनती नहीं) है जो मैं स्वचालित करना चाहते हैं रहा हूँ। जैसा कि मैंने प्रलेखन में पढ़ा है, इस शेबैंग के साथ स्क्रिप्ट को सरल ./script.lisp
कहा जा सकता है, और यह वास्तव में ऐसा करता है ... पहले वर्णित त्रुटि के साथ।
मुझे ठीक से लोड करने के लिए :cl-fad
के लिए लॉन्चर में जोड़ने की क्या ज़रूरत है? प्रलेखन कहा गया है कि --script
विकल्प के साथ SBCL किसी भी init फ़ाइल को लोड नहीं है, इसलिए मैं वास्तव में लाइनों
#-quicklisp
(let ((quicklisp-init (merge-pathnames "systems/quicklisp/setup.lisp"
(user-homedir-pathname))))
(when (probe-file quicklisp-init)
(load quicklisp-init)))
(जो ql:add-to-init-file
.sbclrc को कहते हैं), मेरे लॉन्चर स्क्रिप्ट के copypaste की जरूरत है? शायद मेरे प्रोग्राम सेटअप में कुछ गहरी वास्तुशिल्प दोष हो सकती है?
और हाँ, जब मैं उन लाइनों में प्रवेश करता हूं जिन्हें मैं एसईबीएल में स्वयं आरईपीएल में स्वचालित करने की कोशिश करता हूं, तो प्रोग्राम अपेक्षित चलता है।
मेरे पास अलग डीआईआर में quicklisp है और _yet_ अन्य स्क्रिप्ट को हैक करना नहीं चाहता। :) पहली विधि द्वारा कॉर्डम्पिंग बहुत अच्छा काम करता है, मेरे पास पहले से ही मेरे '~/bin' में कई लॉन्चर हैं। और डंप की गई छवि तेज रफ्तार से भी चलती है। %) – hijarian
हां! छवियों के साथ काम करना बहुत अच्छा है! यही कारण है कि स्मॉलटाकर अपने मुस्कान के साथ दिन-प्रतिदिन काम शुरू करते हैं और जावा एक्लिप्स डेवलपर्स कॉफी के साथ अपना खुद का शुरू करते हैं। –