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] ...

我确信这个问题的解决方案很简单,但我就是想不出来!

2 个答案

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