Emacs lisp'de kendimi eksik bulduğum bir şey, şaşırtıcı bir şekilde, liste manipülasyonunun bir bitidir. Python'un kısa liste dilimlerini özlüyorum.Python'un [n: m] liste dilimlerinin kısa bir emacs lisp karşılığı var mı?
>>> mylist = ["foo", "bar", "baz", "qux", "frobnitz"]
>>> mylist[1:4]
['bar', 'baz', 'qux']
böyle kodundan aynı sonuçları verecek olan fonksiyonlar butlast
ve emacs belgelerinde nthcdr
bkz:
(setq mylist '("foo" "bar" "baz" "qux" "frobnitz"))
(butlast (nthcdr 1 mylist) 1)
;; ("bar" "baz" "qux")
birleştirerek daha liste dilim almanın bir daha özlü bir yolu var mı
butlast
ve
nthcdr
?
ilgili: http://stackoverflow.com/questions/108169/how-do-i-take-a-slice-of-a-list-a-sublist-in-scheme - üçüncü cevap, aşağıdakileri bir dilim; emacs lisp'de bulunup bulunmadığı hakkında bir fikir yok ... – l4mpi
Ahah! Tam da aradığım şey bu, teşekkürler. "secqq", emacs'ın "clmacs.el" ile elde edilebilen diğer pek çok Güzel Şeyler gibi. Ayrıca, "subseq" diye çağırmak muhtemelen boş bir şekilde neden bu iş için uğraştığımdır - bu tür terminoloji konularını emacs ile bir kereden fazla yaşadım. Cevap vermek ister misin, kabul edebilirim? –
Python 'listesinin diziler olduğunu unutmayın, Lisp'ler bağlı listeler olduğunda, performans özellikleri çok farklıdır. Çok sayıda indeksleme ve takipleme yapmanız gerekiyorsa, özellikle listeler uzun sürebilirse, Lisp'de farklı bir tür kullanmalısınız. (Örneğin, bir Python dilimi olan "mylist [x: y]", "O (yx)", bir Lisp eşdeğeri ise "O (y)": "mylist [50000,50005] için" anlamına gelir. Bu, Listenin 10000x olacağı anlamına gelir. Daha yavaş…) – abarnert