Bri*_*ell 21 python emacs elisp
令我惊讶的是,我发现自己在emacs lisp中遗漏的一件事是特定的列表操作.我想念Python的简洁列表切片.
>>> mylist = ["foo", "bar", "baz", "qux", "frobnitz"]
>>> mylist[1:4]
['bar', 'baz', 'qux']
Run Code Online (Sandbox Code Playgroud)
我看到的功能butlast和nthcdrEmacs的文档中,这将使从这样的代码相同的结果:
(setq mylist '("foo" "bar" "baz" "qux" "frobnitz"))
(butlast (nthcdr 1 mylist) 1)
;; ("bar" "baz" "qux")
Run Code Online (Sandbox Code Playgroud)
有没有得到一个列表的片段比合并更简洁的方式butlast和nthcdr?
Boz*_*sov 23
当然有:
(require 'cl-lib)
(setq mylist '("foo" "bar" "baz" "qux" "frobnitz"))
(cl-subseq mylist 1 4)
;; ("bar" "baz" "qux")
Run Code Online (Sandbox Code Playgroud)
在现代的Emacs中,请注意cl不推荐使用在Emacs中,这个错误是什么意思?"警告:运行时需要cl包"
Common Lisp 库很棒,但是如果您的代码库变大并且您想以函数式风格编写简洁的代码,我支持dash.el库,它提供了大量用于列表和树操作的函数。有一个函数的-slice行为就像 Python 的切片:
(-slice (number-sequence 1 10) 1 7 2) ; (2 4 6)
Run Code Online (Sandbox Code Playgroud)
参数按顺序排列:列表、开始、(可选)停止、(可选)步骤。