Eine Sache, die ich in Emacs Lisp fehlt fehlen, ist, überraschenderweise, ein bestimmtes Stück Listenmanipulation. Ich vermisse Pythons knappes Listen-Slicing.Gibt es ein prägnantes Emacs Lisp-Äquivalent von Pythons [n: m] Listen-Slices?
>>> mylist = ["foo", "bar", "baz", "qux", "frobnitz"]
>>> mylist[1:4]
['bar', 'baz', 'qux']
Ich sehe die Funktionen butlast
und nthcdr
in der Emacs-Dokumentation, die die gleichen Ergebnisse von Code wie folgt geben würde:
(setq mylist '("foo" "bar" "baz" "qux" "frobnitz"))
(butlast (nthcdr 1 mylist) 1)
;; ("bar" "baz" "qux")
Gibt es eine prägnante Art und Weise eine Liste Scheibe immer als Kombination butlast
und nthcdr
?
bezogen: http://stackoverflow.com/questions/108169/how-do-i-take-a-slice-of-a-list-a-sublist-in-scheme - die dritte Antwort empfiehlt subsq, die ist Eine Scheibe; keine Ahnung, ob es in Emacs Lisp verfügbar ist ... – l4mpi
Ahah! Genau das habe ich gesucht, danke. 'subsequq' ist, wie viele andere Nice Things, über emacs' clmacs.el' verfügbar. Es ist wahrscheinlich auch der Grund, warum ich "Googeln" genannt habe - ich hatte solche Terminologieprobleme mehr als einmal mit Emacs. Willst du eine Antwort geben, damit ich es annehmen kann? –
Vergessen Sie nicht, dass es sich bei Pythons Listen um Arrays handelt, während es sich bei Lisp um verkettete Listen handelt, die Leistungsmerkmale sind also sehr unterschiedlich. Wenn Sie viel Indexierung und Subsequenzierung durchführen müssen, insbesondere wenn die Listen lang sein können, sollten Sie in Lisp einen anderen Typ verwenden. (Zum Beispiel ist ein Python-Slice 'mylist [x: y]' 'O (yx)', während ein Lisp-Äquivalent 'O (y)' ist: für 'mylist [50000,50005]' bedeutet dies, dass List 10000x ist langsamer ...) – abarnert