2024 Clojure状态调查!分享您的想法。

欢迎!请查阅关于页面以了解更多关于该方式的信息。

0
集合

我想创建一个配对列表,并且认为最好将其构建为一系列的配对配对

(for [ni (range n)
          di (range d)]
     (let [j1 (mod (inc di) n)
              j2 (mod (- n (inc di)) n) ]
          (conj [] [ni j1] [ni j2]) ))

这使我接近目标,但我添加了额外的括号层。我希望的样子如下所示

([[0 1] [0 9]] [[0 2] [0 8]] [[1 1] [1 9]]...

但我确定存在一个简单的解决方案,但我就是想不出来!?

([0 1] [0 9] [0 2] [0 8] [1 1] [1 9] ...

登录注册以添加评论。

0
 
最佳答案

另一个选择是使用配对作为另一组绑定

(for [ni (range n)
      di (range d)
      :let [j1 (mod (inc di) n)
            j2 (mod (- n (inc di)) n)]
      p [[ni j1] [ni j2]]]
  p)

“有趣的”表达式不必出现在for的返回位置:()

太棒了,谢谢!还有谢谢@alexmiller。我更喜欢这个答案,因为它更好地保留了澄清的for结构
0

有多种做法,其中一种是将“for”循环改为使用嵌套的mapcats。

(mapcat 
  (fn [ni] 
    (mapcat 
      (fn [di] 
        (let [j1 (mod (inc di) n)
              j2 (mod (- n (inc di)) n)]
          [[ni j1] [ni j2]])) 
      (range d))) 
  (range n))
...