我想创建一个方程向量,其维数为n ^ {2}乘n ^ {2}(所以如果n = 4,这是一个16乘16的矩阵,如果n = 5则是25乘25矩阵)其中每个元素是由下面给出的整数(元素的值必须始终在1和n * n之间)
x=0
for i=0 to n-1
for j=0 to n-1
for k=0 to n*n-1
vector[n(i - 1) + j + k]= x (mod n*n)+ 1
x = x+1
x= x + n
x=x+1
我开始了以下路径,但我不确定如何在方案中进行x累积
(define (generate-vector n)
(define w (* n n))
(for*/vector ([row (in-range n)]
[col (in-range n)]
[k (in-range w)])
; TO DO))
答案 0 :(得分:1)
如果我理解正确,你需要一个n x n
向量,其中每个元素是从1
开始的不同整数。试试这个:
(define (generate-vector n)
(for/vector ([i (in-range n)])
(build-vector n (lambda (j) (+ (* n i) j 1)))))
例如:
(generate-vector 3)
=> '#(#(1 2 3) #(4 5 6) #(7 8 9))
答案 1 :(得分:1)
根据您的评论而非原始问题,我认为您可能正在寻找类似的内容:
(define generate-vector
(lambda (n)
(let ((template (iota (* n n) 1)))
(let loop ((todo template)
(done '())
(result template))
(if (= 1 (length todo))
(list->vector result)
(let* ((head (car todo))
(tail (cdr todo))
(next (append done (list head))))
(loop tail
next
(append result tail next))))))))
iota
由SRFI-1定义。