gpt4 book ai didi

lisp - Elisp 中各种形式的循环和迭代

转载 作者:行者123 更新时间:2023-12-04 16:39:43 24 4
gpt4 key购买 nike

我试图理解 Emacs Lisp 中的所有循环结构。在一个示例中,我尝试遍历符号列表并将它们打印到 *message* 缓冲区,如下所示:

(let* ((plist package-activated-list) ;; list of loaded packages
(sorted-plist (sort plist 'string<)))
(--map (message (format "%s" it)) sorted-plist))

--map 是包 dash.el 中的一个函数。

如何在纯 Elisp 中执行此操作?

现在如何在不使用其他包的情况下在 Elisp 中迭代列表。

我看过一些使用 whiledolist 宏的例子,例如这里:

https://www.gnu.org/software/emacs/manual/html_node/elisp/Iteration.html

但这些都是破坏性的、非功能性的循环表达方式。

来自 Scheme(大约二十年前使用过它和 SICP!),我倾向于更喜欢功能性的、非破坏性的(这是否总是导致递归?)方式来表达想法。

那么在 Emacs Lisp 中循环遍历项目列表的惯用方法是什么?

另外:有没有办法在 Emacs Lisp 中以函数式方式表达循环?

到目前为止我发现了什么

  1. 循环宏(来自 Common Lisp?)以“cl-*”为前缀

https://www.gnu.org/software/emacs/manual/html_node/cl/Loop-Facility.html

  1. 迭代子句

https://www.gnu.org/software/emacs/manual/html_node/cl/Iteration-Clauses.html#Iteration-Clauses

  1. Dash.el

https://github.com/magnars/dash.el

Magnar Sveen 的优秀软件包被宣传为“Emacs 的现代列表 api。不需要‘cl’。”

还有什么?有什么推荐读物吗?

最佳答案

有许多 native ~map~ 函数,您可以探索它们以遍历列表,并使用一些小技巧或糖分。

在这种情况下,我选择 `mapconcat',它是从 C 代码加载的。

(mapconcat #'message sorted-plist "\n")

关于lisp - Elisp 中各种形式的循环和迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63306647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com