मैं पहले इस्तेमाल कर चुका हूं let
, लेकिन कभी भी इस्तेमाल नहीं किया let*
है let*
(तारांकन) का क्या मतलब है?
इस asterisk के कारण google के लिए मुश्किल था।
मैं पहले इस्तेमाल कर चुका हूं let
, लेकिन कभी भी इस्तेमाल नहीं किया let*
है let*
(तारांकन) का क्या मतलब है?
इस asterisk के कारण google के लिए मुश्किल था।
जवाबों:
इसका अर्थ है कि जब एक से अधिक बाइंडिंग होते हैं तो चर क्रमबद्ध रूप से बंधे होते हैं, ताकि प्रत्येक उन लोगों के लिए बंधे हुए मूल्यों पर निर्भर हो सके, जो इससे पहले बंधे हुए हैं, अर्थात, जो 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 i
Elisp
i let*
let*
(और मैनुअल आमतौर पर चीजों को बेहतर तरीके से कवर करता है, यहां हजारों योगदानकर्ताओं द्वारा बहुत समय और प्रयास के रूप में किया जाएगा, इसे सही होने में सही हो गया है: सही और पूर्ण।)
आप इस साइट को उन सवालों और जवाबों के लिए भी खोज सकते हैं जो टैग का उपयोग करते हैं let-binding
: बस [let-binding]
खोज फ़ील्ड में डालें। (मैं अब करूँगा, यह देखने के लिए कि क्या यह प्रश्न संभवतः एक डुप्लिकेट है ...)
F1 f
।
let*
एक पुनरावर्ती let
अर्थ की तरह है:
(let* ((var1 VAL1)
(var2 VAL2))
...)
के समान ही
(let ((var1 VAL1))
(let ((var2 VAL2))
...))
जिससे पूंजी अक्षरों का उपयोग VAL1
और VAL2
संकेत मिलता है कि वे भी अभिव्यक्ति हो सकते हैं।
let
यदि VAL2
वास्तव में पर निर्भर करता है, तो पुनरावर्ती- बंधन के परिणाम हैं var1
। ड्रू के जवाब में प्रभाव पहले से ही वर्णित है ।
b
5 बराबर होता है क्योंकि यह वैश्विक के लिए बाध्य हैa
। इसकेlet
बजाय पढ़ना चाहिएlet*