【发布时间】:2014-03-16 17:12:32
【问题描述】:
我没有找到任何示例,说明如何在不先添加每个元素(一个接一个) 与函数 add-to-ordered-list - 例如,(add-to-ordered-list 'the-list 'a 1)。这需要随后删除该元素——例如,(delq a the-list)。该过程的第三步是添加 new 元素——例如,(add-to-ordered-list 'the-list "HELLO-WORLD!" 1)。由于以下名为 variable-list-example 的函数使用 26 个元素,我正在寻找一种比首先添加所有 26 个元素(一个接一个)更好的方法来实质上为每个元素分配一个位置编号。函数add-to-ordered-list 使用与标准nth 元素方法不同的数字分配,其中第一个元素的值为0,而add-to-ordered-list 对第一个元素使用1 的值。这是add-to-ordered-list的文档链接:http://www.gnu.org/software/emacs/manual/html_node/elisp/List-Variables.html
此外,在列表开头使用 '( 组合似乎可以防止在列表中使用 let-bound 变量——例如,let-bound 变量在列表中显示为 my-variable 而不是 @ 987654336@。我发现的唯一解决方法是上面提到的使用add-to-ordered-list 的示例——这是一个漫长的三步过程(即,在一开始就一个接一个添加每个元素) .
为了解决这两个问题,我正在寻求一些帮助,请替换the-list 的17th 元素(即字母r)用 my-variable(即@ 987654342@).
(defun variable-list-example ()
(interactive)
(let* (
(my-variable "HELLO-WORLD!")
(the-list '(a b c d e f g h i j k l m n o p q r s t u v w x y z)))
;; replace the 17th element of `the-list` with `my-variable`
(message "Presto -- this is your new list: %s" the-list)
))
名单
'(a b c d e f g h i j k l m n o p q r s t u v w x y z)
第 n 个元素 -- 备忘单/图例
element 0: a
element 1: b
element 2: c
element 3: d
element 4: e
element 5: f
element 6: g
element 7: h
element 8: i
element 9: j
element 10: k
element 11: l
element 12: m
element 13: n
element 14: o
element 15: p
element 16: q
element 17: r
element 18: s
element 19: t
element 20: u
element 21: v
element 22: w
element 23: x
element 24: y
element 25: z
【问题讨论】:
-
旁注:
add-to-list和add-to-ordered-list只能用于保存在全局变量中的列表。 IOW 更改配置变量等内容。在所有其他情况下,您将需要使用push、cl-pushnew、cons、nconc、setf、...。