Jedną z rzeczy, których brakuje mi w emacs-seplenie, jest zaskakująco szczególna manipulacja listą. Tęsknię za streszczeniem listy Pythona.Czy istnieje zwięzły odpowiednik fragmentów list w języku Python [n: m] emacsa?
>>> mylist = ["foo", "bar", "baz", "qux", "frobnitz"]
>>> mylist[1:4]
['bar', 'baz', 'qux']
widzę funkcje butlast
i nthcdr
w dokumentacji emacs, które dają takie same wyniki z kodu tak:
(setq mylist '("foo" "bar" "baz" "qux" "frobnitz"))
(butlast (nthcdr 1 mylist) 1)
;; ("bar" "baz" "qux")
Czy jest bardziej zwięzły sposób dotarcia kawałek listy niż łączenie butlast
i nthcdr
?
powiązane: http://stackoverflow.com/questions/108169/how-do-i-take-a-slice-of-a-lista-a-sublist-in-scheme - trzecia odpowiedź poleca podseq, który jest kromka; nie mam pojęcia, czy jest dostępny w emacs seplp choć ... – l4mpi
Ahah! Właśnie tego szukałem, dziękuję. 'subseq' jest, podobnie jak wiele innych Nice Things, dostępny przez' clmacs.el' emacsa. Poza tym, nazwanie go "subseq" jest prawdopodobnie powodem, dla którego wymyśliłem go pustym hasłem. Miałem takie problemy z terminologią, jak to więcej niż raz z emacs. Chcesz odpowiedzieć, abym mógł to zaakceptować? –
Nie zapominaj, że listy 'Pythona' są tablicami, podczas gdy Lispy są połączonymi listami, więc charakterystyki wydajności są bardzo różne. Jeśli potrzebujesz dużo indeksowania i kolejności, szczególnie jeśli lista może być długa, powinieneś używać innego typu w Lisp. (Na przykład fragment Pythona 'mylist [x: y]' to 'O (yx)', podczas gdy odpowiednik Lisp to 'O (y)': dla 'mylist [50000,50005]' oznacza to, że lista będzie miała 10000x wolniej ...) – abarnert