मैं ओकंपल में नया हूं और कुछ छोटे उदाहरण एप्लिकेशन लिखने की कोशिश कर रहा हूं। मैं लिनक्स उबंटू 10.04 के तहत ocamlc
संस्करण 3.11.2 का उपयोग कर रहा हूं। मैं दो फ़ाइलों को संकलित करना चाहते हैं:एकाधिक ओकैम फाइलों को संकलित करना
a.ml
b.ml
फ़ाइल b.ml
a.ml
से परिभाषाओं उपयोग करता है। जहां तक मैं समझता हूं, मैं केवल संकलन करने के लिए ocamlc -c
का उपयोग कर सकता हूं। मैं ocamlc
को एक अंतिम बार कॉल कर सकता हूं जब मेरे पास सभी .cmo
फ़ाइलें निष्पादन योग्य से लिंक करने के लिए होती हैं। साथ ही, किसी फ़ाइल को संकलित करते समय किसी अन्य फ़ाइल से परिभाषाओं का उपयोग करते समय, मुझे संकलक को बताना होगा जिसमें बाहरी परिभाषाओं को खोजने के लिए .cmi
फ़ाइल है।
तो मेरा विचार का इस्तेमाल किया गया:
ocamlc -i -c a.ml > a.mli
ocamlc -c a.mli b.ml
ocamlc -o b a.cmo b.cmo
पहला कदम काम करता है और फ़ाइलों a.mli
और a.cmo
पैदा करता है, लेकिन जब दूसरे चरण के लिए चल रहा
File "b.ml", line 1, characters 28-31:
Error: Unbound value foo
मिल जहां foo
एक समारोह है कि a.ml
में परिभाषित किया गया है और b.ml
में बुलाया गया है।
तो मेरा सवाल है: मैं प्रत्येक स्रोत फ़ाइल को अलग से कैसे संकलित कर सकता हूं और कमांड लाइन पर आयात करने के लिए इंटरफेस निर्दिष्ट कर सकता हूं? मैं प्रलेखन में देख रहा हूं और जहां तक मैं समझ सकता हूं मुझे .mli
फ़ाइलों को शामिल करने के लिए निर्दिष्ट करना है, लेकिन मुझे नहीं पता कि कैसे।
संपादित
यहां कुछ और जानकारी। फ़ाइल a.ml
परिभाषा
let foo = 5;;
फ़ाइल b.ml
अभिव्यक्ति
print_string (string_of_int foo)^"\n";;
वास्तविक उदाहरण बड़ा है लेकिन इन फाइलों के साथ मैं पहले से ही त्रुटि मैं ऊपर की सूचना दी है शामिल हैं।
संपादित 2
मैं फ़ाइल b.ml
संपादित और A.foo
साथ foo
प्रतिस्थापित करते हैं और इस काम करता है (foo b.ml
में दिख रहा है, भले ही मैं एक संकलन त्रुटि जो इस प्रश्न के लिए महत्वपूर्ण नहीं है नहीं है)। मुझे लगता है कि फाइलों को स्पष्ट रूप से लिखने के लिए क्लीनर है, जैसा कि
क्या आपने बी में ए खोल दिया था, क्योंकि अन्यथा यह समझ में नहीं आता है। –
नहीं। क्या मुझे ए में एक मॉड्यूल परिभाषित करना है और इसे बी में खोलना है? फिलहाल ए में सभी परिभाषाएं वैश्विक हैं (मेरे पास कोई मॉड्यूल नहीं है)। – Giorgio
प्रत्येक ओकैम फ़ाइल के लिए एक अंतर्निहित मॉड्यूल है। तो आपकी फ़ाइल 'a.ml'' ए' नामक मॉड्यूल को परिभाषित करती है। –