嵌套循环与方案中的累积

时间:2016-04-13 13:54:22

标签: scheme racket

我想创建一个方程向量,其维数为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))

2 个答案:

答案 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定义。