2012-11-01 17 views
16

एक बात मैं अपने आप को Emacs में लापता खोजने के तुतलाना है, आश्चर्यजनक रूप से, सूची में गड़बड़ी की एक विशेष सा। मुझे पायथन की संक्षिप्त सूची टुकड़ा याद आती है।क्या पाइथन की [एन: एम] सूची स्लाइस के बराबर एक संक्षिप्त emacs lisp है?

>>> mylist = ["foo", "bar", "baz", "qux", "frobnitz"] 
>>> mylist[1:4] 
['bar', 'baz', 'qux'] 

मैं कार्यों butlast और Emacs दस्तावेज में nthcdr देखते हैं, जो इस तरह कोड से एक ही परिणाम देना होगा:

(setq mylist '("foo" "bar" "baz" "qux" "frobnitz")) 
(butlast (nthcdr 1 mylist) 1) 
;; ("bar" "baz" "qux") 

वहाँ के संयोजन से एक सूची टुकड़ा हो रही का अधिक संक्षिप्त तरीका है butlast और nthcdr?

+3

संबंधित: http://stackoverflow.com/questions/108169/how-do-i-take-a-slice-of-a-list-a-sublist-in-scheme - तीसरे जवाब subseq है जो सिफारिश की गई है एक टुकड़ा; कोई विचार नहीं है कि यह emacs lisp में उपलब्ध है हालांकि ... – l4mpi

+1

अहह! यही वही है जो मैं ढूंढ रहा था, धन्यवाद। 'subseq', कई अन्य नाइस चीजों की तरह है, जो Emacs के 'clmacs.el' के माध्यम से उपलब्ध है। इसके अलावा, इसे "उपसेक" कहा जाता है, शायद यही कारण है कि मैं इसके लिए खाली गुगलिंग क्यों आया - मेरे पास शब्दावली के मुद्दे हैं जैसे कि emacs के साथ एक से अधिक बार। उत्तर देना चाहते हैं तो मैं इसे स्वीकार कर सकता हूं? –

+3

भूल मत कि अजगर 'list's, सरणियों रहे हैं, जबकि लिस्प के लिंक किए गए सूचियों रहे हैं, इसलिए प्रदर्शन विशेषताओं बहुत अलग हैं। यदि आपको बहुत सारे अनुक्रमण और बाद में करने की आवश्यकता है, खासकर अगर सूचियां लंबी हो सकती हैं, तो आपको लिस्प में एक अलग प्रकार का उपयोग करना चाहिए। (उदाहरण के लिए, एक अजगर टुकड़ा 'MyList [x: y]' 'ओ (YX)', जबकि एक लिस्प बराबर 'हे (y है)' है: 'MyList [50000,50005] के लिए' इसका मतलब सूची 10000x हो जाएगा धीमी ...) – abarnert

उत्तर

19

ज़रूर है:

(require 'cl) 
(setq mylist '("foo" "bar" "baz" "qux" "frobnitz")) 
(subseq mylist 1 4) 
;; ("bar" "baz" "qux") 
+2

ग्रेट! सही, सहायक उत्तर अब स्टैक ओवरफ़्लो पर है जहां Google इसे आसानी से ढूंढ सकता है: सभी दुनिया के साथ सही हैं। :) –

+1

दुनिया की सेवा होने की खुशी :-) –

2

Common Lisp library महान है, लेकिन अपने codebase बड़ा हो जाता है और आप कार्यात्मक शैली में संक्षिप्त कोड लिखने के लिए चाहते हैं, तो मैं dash.el पुस्तकालय है, जो सूची और के लिए कार्य की भारी राशि प्रदान करता है समर्थन वृक्ष मैनिप्लेशंस।

(-slice (number-sequence 1 10) 1 7 2) ; (2 4 6) 

तर्क क्रम में हैं: (वैकल्पिक) सूची, शुरू, बंद करो, (वैकल्पिक) कदम वहाँ एक समारोह -slice कि बस पायथन के टुकड़ा करने की क्रिया की तरह बर्ताव करता है।