2015-04-06 2 views
0
(set! max-vector  9) 

(set! procedures-vector (vector (vector 0 0 0) 
           (vector 1 1 1) 
           (vector 2 4 2) 
           (vector 3 9 4) 
           (vector 4 16 8) 
           (vector 5 25 12) 
           (vector 6 36 18) 
           (vector 7 49 24) 
           (vector 8 64 32))) 

(set! drawables-index 0) 
(while (< drawables-index max-vector)  
     (set! vector-element (vector-ref procedures-vector drawables-index)) 
     (set! element-length (vector-length vector-element)) 

     (set! vector-element-a (vector-ref vector-element 0)) 
     (set! vector-element-b (vector-ref vector-element 1)) 
     (set! vector-element-c (vector-ref vector-element 2)) 

     (set! drawables-index (+ drawables-index 1))) 

Проблема заключается в том, что в каждой итерации вектор-элементов а, Ь & с являются то же самое! Поэтому я вижу (0 0 0) достаточно справедливо и (1 1 1) - ОК, это круто, но он продолжает производить (2 2 2) (3 3 3). Я проверил длину элемента результаты вектора-ref на процедуре-векторе и он удалил 3 (правильно! 3 элемента, в каждом элементе списка векторов).Как получить доступ к элементам в вектор векторов

Хорошо, я лисица. Будь какая-то мудрая душа, пожалуйста, посмотрите на это и посмотрите, поможет ли мне . Благодаря

+0

Не могли бы вы объяснить более подробно структурированный? На данный момент его довольно неясно .. –

ответ

1

векторы доступа Вы в векторах с вложенной вектор-исх:

(vector-ref (vector-ref vector row) column) 

Вы изменить данные с vector-set! -ную вложенную вектор:

(vector-set! (vector-ref vector row) column value) 

Поскольку вы делаете это в 3 раза вы может сделать выбор вектора строки как временную переменную:

(let ((rowv (vector-ref vector row))) 
    (let ((a (vector-ref rowv 0)) ...) 
    (vector-set! rowv 0 (+ a 1)) ...)) 

set! изменяет имена переменных. Они никогда не изменяют фактический объект, на который он указал.

Смежные вопросы