gpt4 book ai didi

common-lisp - 在 LISP 中的两个列表之间交换元素

转载 作者:行者123 更新时间:2023-12-01 01:53:07 25 4
gpt4 key购买 nike

谢谢大家的支持,我是新手...给定第一个和第二个列表的特定索引,我想在 Common-LISP 中的两个列表之间交换元素,例如:(1 2 3 4) (A B C D) -> (D 2 3 4) 当指定索引为 (0 3) 时。

它可能看起来很随意,但它在音乐序列中有很好的实用性......谢谢,亚历山德罗

最佳答案

如果您需要使用索引,也许向量会更明智。使用例如 ROTATEF ,正如 jkiiski 所解释的:

CL-USER> (let ((a (vector 1 2 3 4))
(b (vector 'a 'b 'c 'd)))
(rotatef (aref a 0) (aref b 3))
(values a b))
#(D 2 3 4)
#(A B C 1)

如果你真的想使用列表,那么使用NTH , 或 ELT ,它适用于两种序列。

先行声明:不能修改常量数据。请注意向量 ab 在运行时是如何分配的。常量数据是在读取时或编译时计算的数据,不应在运行时修改。引用列表是常量,如本例所示:

CL-USER> (let ((list '(a b))) (setf (first list) 0) list)
; in: LET ((LIST '(A B)))
; (SETF (FIRST LIST) 0)
; ==>
; (SB-KERNEL:%RPLACA LIST 0)
;
; caught WARNING:
; Destructive function SB-KERNEL:%RPLACA called on constant data: (A B).
; See also:
; The ANSI Standard, Special Operator QUOTE
; The ANSI Standard, Section 3.2.2.3
;

关于common-lisp - 在 LISP 中的两个列表之间交换元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51207434/

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