You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Clojure如何实现vector数字元素依次累加生成前缀和,现有map写法无效怎么解决

问题原因分析

你写的实现代码存在两个核心问题:

  1. map遍历集合时,匿名函数内的%对应的是当前遍历到的单个数字元素(第一次是10、第二次是27,以此类推),你调用的next是序列操作函数,只能作用于集合类型,对数字调用会直接抛出类型错误。
  2. 你的逻辑没有存储之前累加的结果,就算语法修正也无法计算出符合要求的前缀和序列。

正确实现方案

Clojure内置了reductions函数,它的作用是返回reduce执行过程中每一步的中间结果,刚好匹配前缀累加的需求,不需要手动写遍历逻辑:

(reductions + coll)

执行后输出结果就是你需要的(10 37 44 56)。

如果希望手动实现底层逻辑加深理解,可以用惰性序列实现:

(defn prefix-sum [coll]
  (letfn [(sum-seq [acc s]
            (lazy-seq
             (when-let [x (first s)]
               (let [new-acc (+ acc x)]
                 (cons new-acc (sum-seq new-acc (rest s)))))))]
    (sum-seq 0 coll)))

调用(prefix-sum coll)也可以得到相同的输出结果。

内容的提问来源于stack exchange,提问作者Dimitrios Fkiaras

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 16:36:04