(defun hash-keys (hash-table)
(loop for key being the hash-keys of hash-table collect key))
को परिभाषित क्योंकि कॉमन लिस्प में समारोह संकलित किया गया है में कोई नुकसान नहीं है। यदि आपके विक्रेता ने यह फ़ंक्शन प्रदान किया है, तो यह वही काम करेगा और आपकी तुलना में अधिक कुशल नहीं होगा।
व्याख्या की गई भाषाओं में, लगभग कुछ भी जो आप लिखते हैं, वह "अंतर्निहित" दिनचर्या की तुलना में एक प्रदर्शन नुकसान होता है।
हैश की सामग्री को अपनाना अपमानजनक है; लूप आपको याद दिलाने के बिना हैश को संसाधित करने देता है। तो शायद आप इसके बजाय मैक्रो चाहते हैं (कुछ लिस्पस dohash
या एक्सटेंशन के समान) प्रदान करते हैं।
(defmacro do-hash ((key-var val-var hash-expr &optional result-form) &body body)
(let ((hash-var (gensym "HASH-")))
`(loop with ,hash-var = ,hash-expr
for ,key-var being the hash-keys of ,hash-var
for ,val-var being the hash-values of ,hash-var
do (progn ,@body)
finally (return ,result-form))))
या एक हैश मानचित्रण समारोह:
(defun mapc-hash (hash-table fun)
(loop for key being the hash-keys of hash-table
for value being the hash-values of hash-table
do (funcall fun key value)))
चाहिए भाषा है कि किसी को एक मिनट में लिख सकते हैं इस तरह हर संभव गैजेट होता है?
सामान्य लिस्प में, बैटरी शामिल हैं, लेकिन वे अन्य प्रकार की बैटरी हैं: चीजें जो वास्तव में करना मुश्किल होती हैं। उदाहरण के लिए, compile
रन टाइम पर गतिशील रूप से संकलित कोड के लिए फ़ंक्शन। आधे दर्जन अलग-अलग तरीकों से हैश टेबल से खींचने वाली चाबियों या मूल्यों की तुलना में अधिकांश उपयोगकर्ताओं को स्क्रैच से ऐसी चीज विकसित करना अनिवार्य रूप से मुश्किल होगा।
आम लिस्प अपने समय के लिए बहुत अधिक "बैटरी शामिल" था। लोग अब और अधिक (और विभिन्न प्रकार की) बैटरी की अपेक्षा करते हैं। – Xach
आम लिस्प अब सी की तुलना में थोड़ा बड़ा है, जो अब आईएसओ मानक के करीब 700 पृष्ठों को दबा रहा है। (और 1 9 8 9 में जब यह 200-कुछ पेज था, तो यह केवल थोड़ी अधिक "बैटरी शामिल" भाषा थी।) – Kaz
अधिकांश "बैटरी शामिल" भाषाएं जो इन दिनों लोकप्रिय हैं ** ** ** इस तरह से हैं, क्योंकि कार्य कि आप खुद को लिखने के लिए एक प्रदर्शन नुकसान है। – Kaz