首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >emacs lisp:如何删除/删除列表中的元素?

emacs lisp:如何删除/删除列表中的元素?
EN

Stack Overflow用户
提问于 2012-07-20 05:29:04
回答 3查看 15K关注 0票数 11

我尝试了使用emacs的第一步将元素"\\.synctex\\.gz"LaTeX-clean-intermediate-suffixes中移除。

代码语言:javascript
复制
(eval-after-load 'latex
  '(setq my-LaTeX-clean-intermediate-suffixes (remove '"\\.synctex\\.gz" LaTeX-clean-intermediate-suffixes)); that's not working
  '(setq LaTeX-clean-intermediate-suffixes
     (append my-LaTeX-clean-intermediate-suffixes (list "-blx\\.bib" "\\.run\\.xml"))))

我如何在这里删除这个元素?我找到了removedelete,两种方法都试过了,但是我得到了错误的wrong-number-of-arguments-type。

更新

我试过这个:

代码语言:javascript
复制
(eval-after-load 'latex
  (setq LaTeX-clean-intermediate-suffixes (delete "\\.synctex\\.gz"  LaTeX-clean-intermediate-suffixes))
  '(setq LaTeX-clean-intermediate-suffixes
     (append LaTeX-clean-intermediate-suffixes (list "-blx\\.bib" "\\.run\\.xml"))))

但我在回溯中得到了相当长的输出:

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-20 07:21:52

您所看到的错误不是由于对列表的操作,而是由于错误地使用了“后加载”。这个函数只允许两个参数:(eval-after-load FILE FORM)。所以你的片段应该读

代码语言:javascript
复制
(eval-after-load 'latex
  '(setq LaTeX-clean-intermediate-suffixes (delete "\\.synctex\\.gz"  LaTeX-clean-intermediate-suffixes)
         LaTeX-clean-intermediate-suffixes (append LaTeX-clean-intermediate-suffixes (list "-blx\\.bib" "\\.run\\.xml"))))

(在单个setq语句中允许多个赋值)或更一般的变体(在单个progn中包含任意多个表单):

代码语言:javascript
复制
(eval-after-load 'latex
  '(progn
     (setq LaTeX-clean-intermediate-suffixes (delete "\\.synctex\\.gz"  LaTeX-clean-intermediate-suffixes))
     (setq LaTeX-clean-intermediate-suffixes (append LaTeX-clean-intermediate-suffixes (list "-blx\\.bib" "\\.run\\.xml")))))
票数 8
EN

Stack Overflow用户

发布于 2012-07-20 06:14:26

正如assem所指出的,代码中似乎有额外的空格,从而阻止了对remove的正确调用。

请注意,deleteremove都是为此目的工作的,只要列表中的元素可以通过用于它们的equal进行正确的比较。如果要使用eq进行比较,请使用delqremq函数。

deleteremove (或delqremq分别)的主要区别是,delete按副作用删除给定的元素,即更改给定的列表,而remove不返回给定列表的副本,并删除元素。

代码语言:javascript
复制
(setq list1 '("foo" "bar" "baz"))
(setq list2 (remove "bar" list1))

(message "list1: %s" list1)
(message "list2: %s" list2)

(setq list3 (delete "bar" list1))

(message "list1: %s" list1)
(message "list3: %s" list3)

如果对上述代码进行评估,您将在*Message*缓冲区中找到以下输出:

代码语言:javascript
复制
list1: (foo bar baz)
list2: (foo baz)
list1: (foo baz)
list3: (foo baz)

如您所见,在list1上调用list1之后,它没有改变。但是当你在上面打电话给delete之后,情况就变了。

票数 29
EN

Stack Overflow用户

发布于 2012-07-20 06:13:09

delete应该能工作

node/elisp/Sets-And-Lists.html

代码语言:javascript
复制
(setq LaTeX-clean-intermediate-suffixes (delete "\\.synctex\\.gz"  LaTeX-clean-intermediate-suffixes))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11573395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档