emacs lispに欠けていることは、意外にも、リスト操作の特定のビットです。私はPythonの簡潔なリストスライシングが欠けています。Pythonの[n:m]リストスライスの簡潔なemacs lispがありますか?
>>> mylist = ["foo", "bar", "baz", "qux", "frobnitz"]
>>> mylist[1:4]
['bar', 'baz', 'qux']
私はこのようなコードから同じ結果与えるEmacsのドキュメント、内の関数butlast
とnthcdr
を参照してください。
(setq mylist '("foo" "bar" "baz" "qux" "frobnitz"))
(butlast (nthcdr 1 mylist) 1)
;; ("bar" "baz" "qux")
は組み合わせよりも、リストのスライスを得るための、より簡潔な方法はありますbutlast
およびnthcdr
?
関連:http://stackoverflow.com/questions/108169/how-do-i-take-a-slice-of-a-list-a-sublist-in-scheme - 第3の答えは、スライス;しかし、emacs lispでも利用可能かどうかは考えられません... – l4mpi
Ahah!それはまさに私が探していたものです、ありがとうございました。 'subseq'は他の多くのNice Thingsと同様に、emacsの' clmacs.el'で利用できます。また、それを "subseq"と呼んでいるのはおそらく、私が空白になった理由です。これはemacsで何度も同じような用語の問題がありました。私はそれを受け入れることができるように答えをしたいですか? –
Python 'list'sは配列であり、Lispはリンクされたリストであることを忘れてはいけません。そのため、パフォーマンスの特性は大きく異なります。特にリストが長くなる可能性がある場合は、多くのインデクシングとサブシーケンスを行う必要がある場合は、Lispで別のタイプを使用する必要があります。 (例えば、Pythonのスライス 'mylist [x:y]'は 'O(yx)'、Lispは 'O(y)'です: 'mylist [50000,50005]'の場合、リストは10000x遅い...) – abarnert