क्या "चलो *" (तारांकन दो) का मतलब है


13

मैं पहले इस्तेमाल कर चुका हूं let, लेकिन कभी भी इस्तेमाल नहीं किया let* है let*(तारांकन) का क्या मतलब है?

इस asterisk के कारण google के लिए मुश्किल था।

जवाबों:


20

इसका अर्थ है कि जब एक से अधिक बाइंडिंग होते हैं तो चर क्रमबद्ध रूप से बंधे होते हैं, ताकि प्रत्येक उन लोगों के लिए बंधे हुए मूल्यों पर निर्भर हो सके, जो इससे पहले बंधे हुए हैं, अर्थात, जो let*बाइंडिंग में इसके पहले आते हैं ।

के लिए let(कोई तारांकन), बाइंडिंग से कोई भी (चर, सिद्धांत रूप में, समानांतर में बाध्य किया जा सकता है) दूसरों के किसी भी पहले होने माना जा सकता है।

इसलिए (let ((a 42) (b a))...b)एक त्रुटि उत्पन्न कर सकता है क्योंकि यह bमान को बांधने की कोशिश करता है a, और aकम से कम (जो विशेष रूप aसे इस में बंधा हुआ है let) को एक मूल्य के लिए बाध्य नहीं माना जा सकता है।

[यदि कुछ अन्य (उदाहरण के लिए वैश्विक) चर a एक मान से बंधा हुआ है, उदाहरण के लिए 5, तो वह letअभिव्यक्ति इसके (स्थानीय) aको 42बाध्य bकरेगा और वैश्विक के मान को बाँध देगा a, अर्थात 5।]

लेकिन (let* ((a 42) (b a))...b)रिटर्न 42क्योंकि aके लिए बाध्य हो जाता है 42 और फिर b के मूल्य के लिए बाध्य हो जाता है a

एलिस्पल मैनुअल, नोड लोकल वेरिएबल्स देखें


अपडेट, @ DoMiNeLa10 के रिमाइंडर से टिप्पणी में:

मैनुअल के अलावा, आप हेल्प कमांड का भी उपयोग कर सकते हैं । "Emacs से पूछें" के सभी विभिन्न तरीकों में से , वे सबसे पहले सीखने वाले और सबसे उपयोगी हैं।

और C-h f let*हमें बताता है, सफलतापूर्वक:Each VALUEFORM can refer to the symbols already bound by this VARLIST.


हालांकि यहाँ पूछने में कुछ भी गलत नहीं है, अगर आप Emacs से इस तरह के सवाल पूछते हैं तो आप अपने आप पर एक एहसान करेंगे । बस मैनुअल के इंफो ब्राउजर को खोलने के लिए उपयोग करें, मैनुअल चुनें, और इंडेक्स में देखने के लिए उपयोग करें (पूरा होने के साथ)। यह आपको सीधे उस नोड पर ले जाता है जो इसे कवर करता है।C-h iElispi let*let*

(और मैनुअल आमतौर पर चीजों को बेहतर तरीके से कवर करता है, यहां हजारों योगदानकर्ताओं द्वारा बहुत समय और प्रयास के रूप में किया जाएगा, इसे सही होने में सही हो गया है: सही और पूर्ण।)


आप इस साइट को उन सवालों और जवाबों के लिए भी खोज सकते हैं जो टैग का उपयोग करते हैं let-binding: बस [let-binding]खोज फ़ील्ड में डालें। (मैं अब करूँगा, यह देखने के लिए कि क्या यह प्रश्न संभवतः एक डुप्लिकेट है ...)


उपरोक्त उदाहरण में एक टाइपो है, जब b5 बराबर होता है क्योंकि यह वैश्विक के लिए बाध्य है a। इसके letबजाय पढ़ना चाहिएlet*
jue

@ जू: सही; धन्यवाद।
ड्रयू

इसके साथ कार्यों के बारे में पूछना भी संभव है F1 f
DoMiNeLa10

@ DoMiNeLa10: वास्तव में; अच्छी बात। जब भी टिप्पणियों को हटाया जा सकता है मैंने इसका उल्लेख करने के लिए उत्तर को अपडेट कर दिया है। धन्यवाद।
ड्रयू

5

let*एक पुनरावर्ती letअर्थ की तरह है:

(let* ((var1 VAL1)
       (var2 VAL2))
  ...)

के समान ही

(let ((var1 VAL1))
  (let ((var2 VAL2))
    ...))

जिससे पूंजी अक्षरों का उपयोग VAL1और VAL2संकेत मिलता है कि वे भी अभिव्यक्ति हो सकते हैं।

letयदि VAL2वास्तव में पर निर्भर करता है, तो पुनरावर्ती- बंधन के परिणाम हैं var1ड्रू के जवाब में प्रभाव पहले से ही वर्णित है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.