gpt4 book ai didi

lisp - Elisp:如何推回列表

转载 作者:太空宇宙 更新时间:2023-11-03 18:39:49 26 4
gpt4 key购买 nike

有没有办法在 elisp 中返回列表?

我找到的最接近的是

(add-to-list 'myList myValue t) ;; t tells it to put to back of the list

但是,问题在于添加到列表会强制执行唯一性。另一种选择是 (push 'myList myVal)但这只能推到列表的前面。我尝试使用 (cons myList myVal)但是 IIRC 返回的不是列表。

唯一有用的是

(setq myList (append myList (list myVal)))

但是这种语法很可怕,感觉做一些简单的事情需要做很多额外的工作。

有没有更快的方法推到列表的后面。如 (add-to-list) 中所示,这显然是可能的, 但有没有办法在不强制唯一性的情况下做到这一点?

换句话说,像 C++ 和 <List> 那样的一个很好的旧推回函数类

最佳答案

Lisp 列表与其他语言中的“列表”

Lisp 列表是 cons 单元链(“链表”),而不是像 C 中那样的专门的顺序容器,也不是像 Perl 和 Python 中那样奇怪的列表和向量的混合体。

这种美妙的方法允许将相同的方法应用于代码数据,从而创建一种可编程的编程语言

Lisp 没有“推回”功能的原因是

  • 它不需要它:-)
  • 定义不是很明确

不需要

添加到末尾与列表的长度成线性关系,所以,对于积累,标准模式是结合 push在迭代和 nreverse完成后。

定义不明确

add-to-list 使用symbol 作为参数是有原因的(这使得它对编程毫无用处)。

添加到空列表时会发生什么?您需要修改存储列表的地方

当列表与另一个对象共享结构时会发生什么?如果你使用

(setq my-list (nconc my-list (list new-value)))

所有其他对象也被修改。

如果你像你建议的那样写,

(setq my-list (append my-list (list new-value)))

您将在每次添加时分配 (length my-list) 单元格。

关于lisp - Elisp:如何推回列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43210505/

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