मैं का पालन करते हुए Clojure और हैरान सीखने किया गया है:परेशान: लूप के लिए क्लोजर: जबकि -> अप्रत्याशित व्यवहार?
user=> (for [a (range 1 4) b (range 1 4)] [a b])
([1 1] [1 2] [1 3] [2 1] [2 2] [2 3] [3 1] [3 2] [3 3]); _no surprise here_
के :while (not= a b)
जोड़ते हैं, मैं एक खाली सूची देखने के लिए के रूप में पाश अगर हालत झूठी है बंद कर देना चाहिए उम्मीद है। इस मामले में यह पहला आइटम है जहां a
= b
= 1 है। चलो देखते हैं:
user=> (for [a (range 1 4) b (range 1 4) :while (not= a b) ] [a b])
([2 1] [3 1] [3 2]) ; _surprise!_
:while
:when
को (= a b)
जोड़े
user=> (for [a (range 1 4) b (range 1 4) :when (not= a b) ] [a b])
([1 2] [1 3] [2 1] [2 3] [3 1] [3 2]); _expected_
किसी को समझा सकते हैं क्यों (for [ ... :while ..] ...)
बर्ताव करता है इस तरह?
मैं ओएस एक्स
पर Clojure 1.3 उपयोग कर रहा हूँ धन्यवाद और स्वरूपण की कमी के लिए माफी माँगता हूँ। यह StackOverflow पर मेरी कुंवारी पोस्ट है।
धन्यवाद, निकिता। तो अगर: केवल अंदरूनी पाश पर लागू होता है, तो मैं बाहरी लूप पर भी इसे कैसे लागू करूं? मेरी समस्या यह है: (के लिए [से: ए: बी: सी: डी: ई: एफ] से [: ए: बी: सी: डी: ई: एफ]: चलो [पथ (ढूंढने वाला पथ अब)] : पथ के दौरान) पथ); पथ शून्य होने पर लूप बंद होना चाहिए। – jbear
क्षमा करें, मेरा मतलब है (के लिए [से: ए: बी: सी: डी: ई: एफ] से [: ए: बी: सी: डी: ई: एफ]: चलो [पथ (खोजने के लिए पथ) ]: जबकि पथ] पथ) – jbear
@ जेबियर, मुझे नहीं पता :(हो सकता है कि आप बेहतर तरीके से आलसी सीक बनाएं और जब वे शून्य न हों, मुझे यकीन नहीं है कि 'for' आलसी है। –