首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Elisp -在列表上循环

Elisp -在列表上循环
EN

Stack Overflow用户
提问于 2011-12-15 05:00:55
回答 2查看 12K关注 0票数 26

在Emacs Lisp中循环Lisp并对每一对做一些事情的最好方法是什么?我想一个宏不会很难,我只是想知道这是不是内置在某个地方。有没有比下面更优雅的方式呢?

代码语言:javascript
复制
(setq my-list '((a . 1)
                (b . 2)
                (c . 3)))

(loop for key in (mapcar 'car my-list)
      for value in (mapcar 'cdr my-list)
      collect (cons value key))

;; Returns this
((1 . a)
 (2 . b)
 (3 . c))
EN

回答 2

Stack Overflow用户

发布于 2011-12-15 05:39:28

另一种不使用loop的方法是使用mapcar和一个lambda。我不认为它更优雅,但与Common Lisp相比,它更适合于elisp:

代码语言:javascript
复制
(mapcar (lambda (element)
      (let ((key (car element))
            (value (cdr element)))
      (cons value key)))
      '((1 . a) (2 . b)))
票数 18
EN

Stack Overflow用户

发布于 2014-08-04 03:19:39

dash.el提供了许多像maps这样的列表操作函数。那些接受函数作为参数的函数也有对应的anaphoric。这样就可以编写简洁的functional代码。dash.el函数以短划线开头,因此得名,而回指版本以两个短划线开头。所以ataylor's variant看起来会更好,像这样:

代码语言:javascript
复制
(--map (cons (cdr it) (car it)) '((1 . a) (2 . b))) ; ((a . 1) (b . 2))
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8511583

复制
相关文章

相似问题

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