我想写一个函数,当你传入一个向量作为参数时,它会返回向量的迭代,即
非常感谢任何帮助
答案 0 :(得分:4)
https://github.com/clojure/math.combinatorics/中的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])
答案 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]]
答案 2 :(得分:0)
这里的基本思路是将输入分成两部分,然后以相反的顺序连接两部分(第二部分之后的第一部分)。
所以你需要一个函数来计算向量的旋转:
(defn rotations [v]
你想使用矢量(用于快速随机访问),你还需要矢量的大小。
(let [v (vec v)
n (count v)]
您需要遍历输入中应切割的每个位置:
(for [i (range n)]
然后在第i
个位置剪切向量,并按相反的顺序合并它们:
(into (subvec v i n) (subvec v 0 i))
哦,别忘了关闭括号!
)))