Clojure循环接收IllegalArgumentException Key必须为整数



我被困在试图得到一个简单的循环在Clojure工作,我不知道如何继续摆脱异常。我试着写出一个arrange函数到一个向量中的exchange项。代码如下:

(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)))))

或者更好,使用(reduce exchange deck lst)代替@Magos!

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

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

最新更新