gpt4 book ai didi

racket - 对列表中的项目求和

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

我正在使用 Racket 中的简单列表,并且正在执行一个函数来对列表的元素求和。

但我想知道是否有更简单的方法可以做到这一点。

我做了这个函数:

(define (mySum L)
(if (empty? L) 0
(+ (first L) (mySum (rest L))))
)

输出:

(mySum '(1 2 3 4))
10

我想知道是否有人知道执行此操作的更简单方法。我自己解释一下,例如:这是我做的另一个功能:

(define (myAppend L1 L2)
(if (empty? L1) L2
(cons (car L1) (myAppend (cdr L1) L2)))
)

但是这个功能可以通过这样做更简单地完成:

(define (myAppend L1 L2)
(append L1 L2)
)

我的问题是知道是否有更简单的方法来计算列表中项目的总和。谢谢

最佳答案

如果你只想做一个短节目,

(define (mySum L)
(apply + L))

更短。它是否“更简单”是一个解释问题:您编写它的方式似乎“更简单”,因为它纯粹基于列表的结构定义,而 (apply + L) 依赖于在半魔法函数(apply)和 + 的半花哨行为(它接受可变数量的参数的事实)本身必须做某事类似于你已经写的。

(顺便说一句,我也不会更简单地调用您的 myAppend 示例 - 第一个实际上 defines 您想要的功能,而第二个只是 您想要的行为,而这又必须在其他地方定义。如果您将其作为实际程序的一部分,(apply + L) 并使用内置在 append 中当然是要走的路,但如果这是出于教育目的,那么我认为这两个函数的初始版本都更好。)

关于racket - 对列表中的项目求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41512010/

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