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]是错误的结果。