2016-04-13 11 views
0

n^{2}で次元がn^{2}のスキームベクトルを作成したいと思います(n = 4なら16×16行列、n = 5ならば各要素は、以下により与えられる整数である25 25による行列)(要素の値がn 1と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 

Iは、次の道を始めたが、私はないです私が正しく理解している場合、あなたは、各要素が異なるiはn x nベクトルを、欲しい方式で

(define (generate-vector n) 
    (define w (* n n)) 
    (for*/vector ([row (in-range n)] 
       [col (in-range n)] 
       [k (in-range w)]) 
       ; TO DO)) 
+1

'(generate-vector 3)'の結果は何ですか? 'ベクトル[n(i-1)+ j] [k] = ...'はベクトルが配列であり、ベクトルではないことを示しています。長さ 'n * n'の大きなベクトルを生成するか、ベクトルのベクトルのベクトルを生成しますか? – soegaard

+0

擬似コードでも:ベクトルインデックス0または1はベースですか? – soegaard

+0

ベクトルインデックスは0ベースです。私は擬似コードを修正しました – JennyToy

答えて

1

をXの蓄積を行う方法がわからニーガーは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)) 
+0

' #(1 2 3 4 5 6 7 8 9 1 2 3 ...)。すべての整数。しかし、あなたのコードは非常に近いです。 – JennyToy

+1

@JennyToy私はまだ出力として望むものを得られません。 (行列)または1次元ベクトル?なぜ9番目の値の後で繰り返されるのですか?指定する 'n'の値に必要な_exact_出力を定義してください。 –

+0

@JennyToyつまり、質問の一部として期待された出力を持つサンプル入力を書く。あなたの質問には常にこれを行う。それは、働かない擬似コードで何をしたいのかを人々に説明しようとするよりも簡単だ。 –

1

はあなたの擬似コードのほとんど直訳です:

(define (generate-vector n) 
    (define n^2 (* n n)) 
    (define v (make-vector n^2)) 
    (define x 0) 
    (for ([i n]) 
    (for ([j n]) 
     (for ([k n^2]) 
     (vector-set! v (+ (* n i) j) (+ (modulo x n^2) 1)) 
     (set! x (+ x 1))) 
     (set! x (+ x n))) 
    (set! x (+ x 1))) 
    v) 

(generate-vector 3) 

注1:(- i 1)iに変更しました(そうでなければ負の指標を得るときi=0

注2 +kが省略されました。インデックスが大きすぎるためです。

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で定義されています。

関連する問題