मुझे आम-लिस्प में यह पहली/आखिरी चीज़ नहीं मिल रही है। हां, मैं देखता हूं कि यह कैसे काम करता है, लेकिन मुझे नहीं लगता कि यह इस तरह से क्यों काम करता है।आम लिस्प: पहले पहले लौटाता है, लेकिन अंतिम आखिरी बार एक सूची देता है - हुह?
असल में, सूची में पहला आइटम प्राप्त करने के लिए, मैं (first mylist)
का उपयोग कर सकता हूं। हालांकि, अगर मैं अंतिम आइटम चाहता हूं, (last mylist)
मुझे वह नहीं देता है; इसके बजाय, यह मुझे मेरी सूची में अंतिम आइटम वाली एक सूची देता है!
(मैं क्लोजर-सीएल का उपयोग कर रहा हूं, जिसमें कुछ अन्य विषमताएं हैं जो मुझे बग की तरह लगती हैं, लेकिन चूंकि मैं लिस्प-एन 00 बी हूं, इसलिए मैं पुराने के लिए गिरने की कोशिश नहीं कर रहा हूं "दुभाषिया है ब्रोकन "चाल :))
तो, उदाहरण के लिए:
? (setq x '((1 2) (a b)))
=> ((1 2) (A B))
? (first x)
=> (1 2) ; as expected
? (last x)
=> ((A B)) ; why a list with my answer in it?!
? (first (last x))
=> '(A B) ; This is the answer I'd expect from plain-old (last x)
किसी की मदद कर सकते हैं मुझे समझने क्यों पिछले इस करता है? क्या मैं इन वस्तुओं का गलत इस्तेमाल कर रहा हूं? first
वास्तव में अजीब गेंद है ?!
धन्यवाद!
'(' (1 2) '(ए बी) करना) वास्तव में आपके मतलब का मतलब नहीं है, मुझे लगता है। '((1 2) (बी)) का प्रयोग करें। जो आपने लिखा वह सूची के बाद बनाता है: (उद्धरण (1 2)) (उद्धरण (बी)))। यहां दो 'उद्धरणों का अर्थ उस विशेष ऑपरेटर के रूप में नहीं किया गया है जिसका आप संभवतः मतलब रखते थे, लेकिन केवल सादे पुराने प्रतीक हैं जो समान नाम रखते हैं। यह देखने के लिए कि मेरा क्या मूल्यांकन है (पहले (पहले '(' (1 2) '(ए बी)))) आपके आरईपीएल में। इसे QUOTE वापस करना चाहिए। –
थॉमस: आप सही हैं। स्रोत संपादित – Olie