gpt4 book ai didi

clojure - conj 不更新循环内的向量

转载 作者:行者123 更新时间:2023-12-02 00:47:58 24 4
gpt4 key购买 nike

我正在尝试自学 clojure。这应该只是一个简单的函数,它接受一个值并将其前面的每个值相加并返回这些值的总和。

问题是,在 loop 函数中,numbers 没有像我期望的那样用 conj 修改 - numbers 只是一个空向量。这是为什么?

(defn sum                        
[number]
(do (def numbers (vector))
(loop [iteration number]
(if (> iteration 0)
(conj numbers iteration)
(recur (dec iteration))))
(map + numbers)))

最佳答案

一些提示(不是答案):

  • 不要使用do
  • 在函数内部使用 let,而不是 def
  • 使用conj返回的结果,否则什么都不做。
  • 通过recur 将结果传回。

此外,您的sum 函数会忽略其number 参数。

我认为您对 number(要添加的事物的数量)和 numbers(事物本身)感到困惑。记住,

  • 向量(和其他数据结构)知道它们有多长;和
  • 它们通常被快速简洁地处理,如下所示序列,使用 firstrest 而不是索引。

您正在搜索的代码模式非常常见,它已被捕获到名为 reduce 的标准高阶函数中。你可以通过...获得你想要的效果

(defn sum [coll] (reduce + coll))

(def sum (partial reduce +))

例如,

(sum (range 10))
;45

有点跑题了:

如果我是你,我曾经是,我会浏览一些网上提供的优秀的 clojure 教程,手头有一个 REPL。你可以开始寻找 herehere .享受!

关于clojure - conj 不更新循环内的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42336618/

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