सेमिकोलन का उपयोग एसएमएल में कई वाक्य रचनात्मक इकाइयों के लिए किया जाता है। वे आम तौर पर अभिव्यक्तियों या घोषणाओं के अनुक्रम बनाने के लिए उपयोग किए जाते हैं। यहाँ एसएमएल व्याकरण के लिए एक लिंक है:
http://www.mpi-sws.org/~rossberg/sml.html
आपके मामले में, आप घोषणाओं के लिए अर्धविराम (दिसम्बर वर्ग) में रुचि रखते हैं। ध्यान दें कि अर्धविराम जो decs का अनुक्रम बनाता है वैकल्पिक है। एसएमएल मॉड्यूल लिखते समय आपको वास्तव में इसकी आवश्यकता नहीं होती है, और उन्हें देखना दुर्लभ होता है। उदाहरण
structure S = struct
val x = 5
fun f x = x
val z = x + x
end
नहीं
structure S = struct
val x = 5;
fun f x = x;
val z = x + x
end
एक स्रोत फ़ाइल में, केवल जगह आप सामान्य रूप से उपयोग अर्धविराम भाव है कि दुष्प्रभाव को अलग करने के लिए किया जाता है। उदाहरण के लिए,
val x = ref 5
val _ = (x := !x + 1; x := !x+ 2)
लेकिन यह उपयोग दुर्लभ है।
smlnj प्रतिलिपि केवल अर्धविराम को देखते समय घोषणाओं का मूल्यांकन करती है, इसलिए जब भी आप मूल्य देखना या खेलना चाहते हैं तो आपको अर्धविराम का उपयोग करना चाहिए। मुझे लगता है कि use "foo.sml";
मामला उलझन में है क्योंकि यह घोषणा नहीं है; ये एक अभिव्यक्ति है। मुझे कल्पना है कि प्रतिलिपि use "foo.sml"
जैसे val _ = use "foo.sml"
में अभिव्यक्तियों को परिवर्तित करती है। इस प्रकार इसे उपरोक्त के रूप में वास्तव में चलाने के लिए प्रतिलिपि को बताने के लिए अर्धविराम की आवश्यकता होती है। एक साइड नोट के रूप में, use
के बारे में कुछ खास नहीं है। यह बस string -> unit
प्रकार का एक कार्य है।
धन्यवाद। अब मुझे पता है कि घोषणाओं में क्यों जरूरी नहीं है। और फिर आप कृपया बता सकते हैं कि 'उपयोग' foo.sml ";' में क्यों आवश्यक है? मैं अभी भी इसे समझ में नहीं आता। – Ben
मैंने ऊपर स्पष्ट करने की कोशिश की। – seanmcl
+1 एसएमएल व्याकरण संदर्भ के लिए। –