gpt4 book ai didi

loops - Common Lisp - 将函数应用于列表中的每个其他元素

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

我想将函数 (* x 2) 应用于列表中的每个其他元素,并使用 loop 宏返回整个列表。到目前为止,我提出的解决方案是:

(defun double-every-other (xs)
(loop for x in xs by #'cddr collect (* x 2)))

但是,这会将所有其他元素加倍,并且只返回加倍的元素,所以如果我执行:

(double-every-other '(1 2 3 4))

结果是:

'(4 8)

但我希望结果是:

'(1 4 3 8)

有没有办法使用(循环)来做到这一点?

最佳答案

数学较少的另一个版本:

(defun double-every-other (list)
(loop
for (a b) on list by #'cddr
collect a
when b collect (* b 2)))

(double-every-other '(1 2 3 4))
=> (1 4 3 8)

(double-every-other '(1 2 3 4 5))
=> (1 4 3 8 5)

显然,您无法像其他答案那样轻松地抽象出 N(如果您正在考虑“宏观”,请立即停止)。这里我们使用 on 关键字进行迭代,这意味着依次访问每个子列表。由于我们使用 by #'cddr,因此会跳过所有其他子列表。解构语法 (a b) 绑定(bind)访问列表的第一个和第二个元素。

关于loops - Common Lisp - 将函数应用于列表中的每个其他元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38816939/

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