2013-10-08 11 views
12

मुझे पता है कि अर्धविरामों का उपयोग आरईपीएल में टर्मिनेटर के रूप में किया जाता है। लेकिन मैं एक स्रोत फ़ाइल में उनका उपयोग कब करने के बारे में उलझन में हूँ।एसएमएल में अर्धविराम का उपयोग कब करें?

उदाहरण के लिए val x = 1 के बाद यह आवश्यक नहीं है। लेकिन अगर मैं इसे use "foo.sml" के बाद छोड़ देता हूं, तो संकलक इसके बारे में शिकायत करेगा।

फिर, अर्धविरामों का उपयोग करने के नियम क्या हैं?

उत्तर

11

सेमिकोलन का उपयोग एसएमएल में कई वाक्य रचनात्मक इकाइयों के लिए किया जाता है। वे आम तौर पर अभिव्यक्तियों या घोषणाओं के अनुक्रम बनाने के लिए उपयोग किए जाते हैं। यहाँ एसएमएल व्याकरण के लिए एक लिंक है:

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 प्रकार का एक कार्य है।

+0

धन्यवाद। अब मुझे पता है कि घोषणाओं में क्यों जरूरी नहीं है। और फिर आप कृपया बता सकते हैं कि 'उपयोग' foo.sml ";' में क्यों आवश्यक है? मैं अभी भी इसे समझ में नहीं आता। – Ben

+0

मैंने ऊपर स्पष्ट करने की कोशिश की। – seanmcl

+0

+1 एसएमएल व्याकरण संदर्भ के लिए। –

संबंधित मुद्दे