Clojure—返回向量的向量的函数

Clojure—返回向量的向量的函数,clojure,Clojure,我想写一个函数,当你把一个向量作为参数传入时,它会返回向量的迭代 如果传入[1],它将返回[1] 如果您传入[12],它将返回[[12][21]] 如果您传入[1 2 3],它将返回[[1 2 3][2 3 1][3 1 2]] 等 任何帮助都将不胜感激这里的基本思想是将输入分为两部分,并按相反顺序连接两部分(第一部分在第二部分之后) 所以你需要一个函数来计算向量的旋转: (defn rotations [v] 您需要使用向量(用于快速随机访问),并且还需要向量的大小 (let [v (v

我想写一个函数,当你把一个向量作为参数传入时,它会返回向量的迭代

  • 如果传入[1],它将返回[1]
  • 如果您传入[12],它将返回[[12][21]]
  • 如果您传入[1 2 3],它将返回[[1 2 3][2 3 1][3 1 2]] 等

任何帮助都将不胜感激

这里的基本思想是将输入分为两部分,并按相反顺序连接两部分(第一部分在第二部分之后)

所以你需要一个函数来计算向量的旋转:

(defn rotations [v]
您需要使用向量(用于快速随机访问),并且还需要向量的大小

(let [v (vec v)
      n (count v)]
您需要迭代输入中应进行切割的每个位置:

  (for [i (range n)]
然后在
i
-th位置切割矢量,并按相反顺序合并:

    (into (subvec v i n) (subvec v 0 i))
哦,别忘了把括号合上

)))

这里的基本思想是将输入分成两部分,并以相反的顺序连接两部分(第一部分在第二部分之后)

所以你需要一个函数来计算向量的旋转:

(defn rotations [v]
您需要使用向量(用于快速随机访问),并且还需要向量的大小

(let [v (vec v)
      n (count v)]
您需要迭代输入中应进行切割的每个位置:

  (for [i (range n)]
然后在
i
-th位置切割矢量,并按相反顺序合并:

    (into (subvec v i n) (subvec v 0 i))
哦,别忘了把括号合上

)))

它可能看起来像这样:

user> (defn its [items]
        (let [c (count items)]
          (if (<= c 1)
            items
            (->> items
                 cycle
                 (partition c 1)
                 (take c)
                 (mapv vec)))))
#'user/its

user> (its [])
;;=> []

user> (its [1 2])
;;=> [[1 2] [2 1]]

user> (its [1 2 3])
;;=> [[1 2 3] [2 3 1] [3 1 2]]
user>(定义其[项目]
(让[c(计算项目)]
(如果(>项目
周期
(分区c 1)
(以c为例)
(mapv vec(()))
#'用户/its
用户>(其[])
;;=> []
用户>(其[12])
;;=> [[1 2] [2 1]]
用户>(其[1 2 3])
;;=> [[1 2 3] [2 3 1] [3 1 2]]

它可能看起来像这样:

user> (defn its [items]
        (let [c (count items)]
          (if (<= c 1)
            items
            (->> items
                 cycle
                 (partition c 1)
                 (take c)
                 (mapv vec)))))
#'user/its

user> (its [])
;;=> []

user> (its [1 2])
;;=> [[1 2] [2 1]]

user> (its [1 2 3])
;;=> [[1 2 3] [2 3 1] [3 1 2]]
user>(定义其[项目]
(让[c(计算项目)]
(如果(>项目
周期
(分区c 1)
(以c为例)
(mapv vec(()))
#'用户/its
用户>(其[])
;;=> []
用户>(其[12])
;;=> [[1 2] [2 1]]
用户>(其[1 2 3])
;;=> [[1 2 3] [2 3 1] [3 1 2]]

中的函数
置换

Readme.md中的示例:

(ns example.core
  (:require [clojure.math.combinatorics :as combo]))

; PERMUTATIONS
; all the unique arrangements of items
=> (combo/permutations [1 2 3])
([1 2 3] [1 3 2] [2 1 3] [2 3 1] [3 1 2] [3 2 1])

; Note that permutations intelligently handles duplicate items
=> (combo/permutations [1 1 2])
([1 1 2] [1 2 1] [2 1 1]) 

中的函数
permutations

Readme.md中的示例:

(ns example.core
  (:require [clojure.math.combinatorics :as combo]))

; PERMUTATIONS
; all the unique arrangements of items
=> (combo/permutations [1 2 3])
([1 2 3] [1 3 2] [2 1 3] [2 3 1] [3 1 2] [3 2 1])

; Note that permutations intelligently handles duplicate items
=> (combo/permutations [1 1 2])
([1 1 2] [1 2 1] [2 1 1]) 

据我所知,op不需要排列,他需要循环值。这意味着[1 3 2],[2 1 3],[2 3 1]和[3 2 1]是错误的结果。据我所知,op不需要置换,他需要循环值。这意味着[1 3 2]、[2 1 3]、[2 3 1]和[3 2 1]是错误的结果。