gpt4 book ai didi

list - 将列表缩减为其元素之差的总和

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

我有一个简单的列表,其中的整数个数总是偶数,比如

(42 38 15 5)

我想计算其对的差的总和,即

(+ (- 42 38) (+ 15 5)) --> 14

它可以是 2 个、4 个或更多个元素,但它始终是偶数。我认为有一种方法可以为此使用 reduce,但我看不到一种方法可以正确地配对。

有没有一种简单的方法可以做到这一点,或者更容易改变列表结构?例如像

((42 38) (15 5))

最佳答案

您可以为此使用loop:

(loop :for (a b) :on list :by #'cddr
:sum (- a b))

for-on 构造遍历列表的尾部,for 可以解构它,by给出步进函数(默认 #'cdr)。

如果您绝对想使用高阶函数,则需要先进行分区(正如您已经推测的那样)或找到步进机制。

分区可以再次通过 loop 或通过 cons-fiddling 完成。之后,您可以减少:

(reduce (lambda (sum pair)
(+ sum (apply #'- pair)))
(partition 2 list)
:initial-value 0)

或者,您可以将其视为交替加减一个数:

(reduce #'+
(mapcar #'funcall
(circular-list #'+ #'-)
list))

(Circular-list 来自alexandria。)

关于list - 将列表缩减为其元素之差的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53778333/

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