मेरे पास तत्वों की एक सूची है (ए बी सी) और मैं यह जानना चाहता हूं कि (सत्य या गलत) x इसमें है, जहां एक्स 'ए' या डी हो सकता है, उदाहरण के लिए। क्या इसके लिए कोई अंतर्निहित कार्य है?किसी सूची में तत्व खोजने के लिए योजना फ़ंक्शन क्या है?
उत्तर
यदि आपको समकक्ष ऑपरेटरों में किसी एक निर्माण का उपयोग करके तुलना करने की आवश्यकता है, तो आप का उपयोग करके समानता की तलाश करना चाहते हैं, इसके आधार पर आप memq
, memv
, or member
का उपयोग कर सकते हैं।
> (memq 'a '(a b c))
'(a b c)
> (memq 'b '(a b c))
'(b c)
> (memq 'x '(a b c))
#f
आप देख सकते हैं, इन कार्यों sublist पहले मिलान तत्व से शुरू करता है, तो वे एक तत्व को खोजने के लौटने। ऐसा इसलिए है क्योंकि यदि आप ऐसी सूची खोज रहे हैं जिसमें बूलियन हो सकते हैं, तो आपको जिस तत्व को ढूंढ रहे हैं उसे ढूंढने के मामले से #f
ढूंढने के मामले को अलग करने में सक्षम होना चाहिए। एक सूची एक सही मूल्य (योजना में केवल झूठे मूल्य #f
है) है, इसलिए आप इस तरह के एक if
, cond
, and
, या or
अभिव्यक्ति के रूप में एक बूलियन, उम्मीद किसी भी सन्दर्भ में memq
, memv
, या member
का परिणाम का उपयोग कर सकते हैं।
> (if (memq 'a '(a b c))
"It's there! :)"
"It's not... :(")
"It's there! :)"
तीन अलग-अलग कार्यों के बीच क्या अंतर है? यह तुलना के लिए उपयोग किए जाने वाले समकक्ष कार्य पर आधारित है। eq?
(और इस प्रकार memq
) परीक्षण करता है कि दो वस्तुएं समान अंतर्निहित वस्तु हैं; यह मूल रूप से एक सूचक तुलना के बराबर है (या पूर्णांक के मामले में प्रत्यक्ष मूल्य तुलना)। इस प्रकार, दो तार या सूचियां जो दिखती हैं वे eq?
नहीं हो सकती हैं, क्योंकि वे स्मृति में विभिन्न स्थानों में संग्रहीत हैं। equal?
(और इस प्रकार member?
) सूचियों और तारों पर गहरी तुलना करता है, और इसलिए मूल रूप से प्रिंट करने वाले किसी भी दो आइटम equal?
होंगे।eqv?
लगभग कुछ भी संख्याओं के लिए eq?
जैसा है; संख्या के लिए, दो नंबर है कि संख्यानुसार बराबर हैं हमेशा eqv?
होगा, लेकिन वे eq?
नहीं हो सकता है
> (eq? 'a 'a)
#t
> (eq? 'a 'b)
#f
> (eq? (list 'a 'b 'c) (list 'a 'b 'c))
#f
> (equal? (list 'a 'b 'c) (list 'a 'b 'c))
#t
> (eqv? (+ 1/2 1/3) (+ 1/2 1/3))
#t
(इस वजह bignums और तर्कसंगत संख्या है, जो मायनों में संग्रहित किया जा सकता हैं कि वे
eq?
नहीं होगा की है)
(ध्यान दें कि कार्यों में से कुछ व्यवहार विनिर्देश द्वारा अपरिभाषित है, और इस तरह कार्यान्वयन से कार्यान्वयन के लिए अलग हो सकता है, मुझे लगता है कि किसी भी आर आरएस संगत योजना कि सटीक परिमेय संख्याओं को लागू करता है में काम करना चाहिए उदाहरण भी शामिल है)
यदि आपको समकक्ष भविष्यवाणी का उपयोग करके किसी सूची में किसी आइटम की खोज करने की आवश्यकता है ई अलग से लोगों में बनाया में से एक है, तो आप find
या find-tail
से चाहते हो सकता है SRFI-1:
> (find-tail? (lambda (x) (> x 3)) '(1 2 3 4 5 6))
'(4 5 6)
के बजाय' memq' 'का नाम क्या है? – Freewind
'memq' कार्यों के 'सदस्य' परिवार में से एक है, किसी प्रकार के समकक्ष (जैसे अन्य उल्लिखित, 'सदस्य' और 'memv') के आधार पर किसी सूची में किसी आइटम को ढूंढना। 'Q',' v', या पूर्ण नाम इसे तीन समकक्ष कार्यों से जोड़ता है जो वे प्रत्येक उपयोग करते हैं; समानता का परीक्षण करने के लिए 'memq'' eq? 'का उपयोग करता है, 'memv' समकक्ष परीक्षण करने के लिए' eqv? 'का उपयोग करता है, और' सदस्य' समानता का परीक्षण करने के लिए' बराबर 'का उपयोग करता है। उनके बीच के अंतर के लिए समकक्ष कार्यों पर लिंक किए गए दस्तावेज़ देखें। –
धन्यवाद! तो 'memq' को' mem-q', और 'memv'' mem-v' के रूप में माना जा सकता है – Freewind
आप "लगता है" के लिए देख रहे
मूल बातें - सबसे सामान्य स्थिति अभी (प्रवेश सूची को खोजने) है, आम तौर पर एक विधेय के रूप में इस्तेमाल: "सूची में एंट्री है?"। यदि यह प्रश्न में तत्व ढूंढने में सफल होता है, तो यह केवल "टी" के बजाय पहला मिलान तत्व देता है। (दूसरी कड़ी से लिया।)
http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node145.html
-या-
सवाल, योजना के बारे में था नहीं सामान्य लिस्प। –
ठीक है, उसने LISP को टैग किया। –
शीर्षक पढ़ें: 'सूची में कोई तत्व ढूंढने के लिए SCHEME फ़ंक्शन क्या है?'। योजना लिस्प भाषाओं के परिवार में एक बोली है। –
यहाँ एक तरीका है:
> (cond ((member 'a '(a b c)) '#t) (else '#f))
#t
> (cond ((member 'd '(a b c)) '#t) (else '#f))
#f
सदस्य सब कुछ देता है जहां तत्व है से शुरू , या # एफ। एक कंड का उपयोग इसे सही या गलत में बदलने के लिए किया जाता है।
'# t' ठीक है, '# t' –
अगर वहाँ एक समारोह में बनाया मैं नहीं जानता, लेकिन आप एक बना सकते हैं:
(define (occurrence x lst)
(if (null? lst) 0
(if (equal? x (car lst)) (+ 1 (occurrence x (cdr lst)))
(occurrence x (cdr lst))
)
)
)
आप सूची में x
की घटनाओं की संख्या में वापसी करेंगे। आप इसे true
या false
के साथ भी बढ़ा सकते हैं।
- 1. योजना में सूची में तत्व जोड़ने के लिए
- 2. योजना: एक सूची में एक तत्व के परिवर्तन मूल्य
- 3. पायथन: के लिए प्रत्येक सूची तत्व सूची
- 4. फ़ंक्शन खोजने के लिए पैरामीटर
- 5. क्या बाइट्स खोजने के लिए कोई "Pos" फ़ंक्शन है?
- 6. विविधता फ़ंक्शन में किसी सरणी के तत्व कैसे पास करें?
- 7. योजना: सूची
- 8. सूची योजना
- 9. सूची में किसी तत्व का अनुक्रमणिका कैसे ढूंढें?
- 10. योजना सूची तुल्यता तुलना
- 11. क्या वेक्टर में किसी तत्व की अनुक्रमणिका ढूँढने के लिए कोई आर फ़ंक्शन है?
- 12. सूची में किसी तत्व की घटना को गिनने के लिए पाइथोनिक तरीका क्या है?
- 13. संग्रह में निर्दिष्ट तत्व के बाद तत्व को खोजने के लिए लिंक का उपयोग
- 14. मैं योजना में किसी सूची से बेनामी फ़ंक्शन कैसे लागू करूं?
- 15. किसी पृष्ठ पर स्ट्रिंग को खोजने के लिए PHP स्ट्रॉप्स फ़ंक्शन के jQuery या जावास्क्रिप्ट समतुल्य
- 16. सूची सूची की जांच के लिए अंतर्निहित योजना
- 17. क्या फ़ंक्शन में पारित चर के नाम को खोजने के लिए जावा में कोई तरीका है?
- 18. किसी सूची के लिए
- 19. किसी सरणी में किसी अन्य रंग में निकटतम रंग खोजने के लिए सबसे अच्छा एल्गोरिदम क्या है?
- 20. सूची में एक मैच खोजने के लिए सबसे साफ तरीका
- 21. सूची में किसी आइटम को खोजने का सबसे तेज़ तरीका?
- 22. सूची में अद्वितीय आइटम खोजने के लिए स्कैला में कैसे
- 23. POSIX फ़ंक्शन निष्पादन योग्य के लिए पथ खोजने के लिए?
- 24. किसी सूची के भीतर किसी तत्व की स्थिति पाएं
- 25. प्रत्येक सूची तत्व पर int int() फ़ंक्शन?
- 26. पायथन: नेस्टेड सूची में तत्व के लिए इंडेक्सिंग सूची
- 27. खोजने सरणी तत्व
- 28. किसी सूची के सबसे आम तत्व कैसे ढूंढें?
- 29. OCaml में किसी सूची से तत्व को निकालने का मानक तरीका क्या है?
- 30. पॉइंटफ्री शैली में फ़ंक्शन लिखने के लिए सामान्य योजना क्या है?
यह पता लगाने के लिए भाषा संदर्भ का उपयोग करें: http://schemers.org/Documents/Standards/R5RS//HTML/r5rs-ZH-9.html#%_sec_6.3.2 –