gpt4 book ai didi

Clojure 循环接收 IllegalArgumentException Key 必须是整数 clojure.lang.APercientVector.invoke

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

我一直在尝试让 Clojure 中的一个简单循环正常工作,但我不知道如何继续消除异常。我正在尝试编写一个 arrange 函数来交换向量中的项目。这是代码。

(defn exchange [v i] 
(let [[src dst] i]
(assoc v dst (v src) src (v dst))))

(defn arrange []
(loop [idxs [0 0]
deck [\a \b \c \d \e]
pts [[0 1] [2 3] [4 1]]]
(println idxs deck pts)
(empty? pts)
deck
(recur (first pts) (exchange deck idxs) (rest pts))))

;(arrange)
;[b e d c a]

如果删除 println,我在 REPL 中看不到任何内容。我来自 COBOL,所以你知道我正在努力接受这个:)任何使这个更惯用的建议将不胜感激。

6/11-这是更正后的代码。 arrange 在循环中应该只有两个参数。

(defn arrange []
(loop [deck [\a \b \c \d \e]
lst [[0 1] [2 3] [4 1]]]
(if (empty? lst)
deck
(recur (exchange deck (first lst)) (rest lst)))))

或者更好的是,按照@Magos使用(减少交换牌组lst)!

最佳答案

您缺少 if,并且您需要在 idxs 上结束循环,而不是 pts (否则您将错过最终索引对):

(if (empty? idxs)
deck
(recur (first pts) (exchange deck idxs) (rest pts)))

应该工作得更好。

关于Clojure 循环接收 IllegalArgumentException Key 必须是整数 clojure.lang.APercientVector.invoke,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30699628/

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