2017-03-31 74 views
0

我想知道我在做什麼錯在這裏用矢量設置我的方案使用矢量集實現有什麼問題?

(define foo0 
    (lambda (vec) 
    (let* ((newvec (vector vec)) 
      (l  (vector-length vec)) 
      (norm (norm0 vec))) 
     (do ((i 0(+ i 1))) 
     ((= i l)) 
     (vector-set*! newvec i (/(vector-ref vec i) norm))) newvec))) 

我想設置向量的每個元素由標準分(從另一個謂詞整數)。

我不斷收到的錯誤是

vector-set!: index is out of range 
    index: 1 
    valid range: [0, 0] 
    vector: '#(3/4) 

所以我找到了第一個解決方案,但是,newvec被重置爲大小爲1,故該指標超出範圍。

+0

更簡單。代碼的格式非常奇怪。什麼地方出了錯? –

+0

@RainerJoswig這是我的第一篇文章,我的道歉。 – Felix

回答

1

vector使得可變矢量與作爲參數給出的元素,即:

(vector 4)  ; a vector of one element 
(vector 1 2 3) ; a vector of 3 elements 

因此,可以說,你需要,你會變異,並與工作20個元素的矢量。使用vector是不可能的,因爲那樣你將不得不擁有20個虛擬參數。而是使用make-vector它有兩個參數,尺寸和所有元素的可選初始值:

(make-vector 20 0) 
; ==> #(0 0 ... 0), a vector of 20 elements, all 0 
的知識

現在,你可以得到vector-length傳遞的向量的長度可以傳遞到make-vector製作一個相同大小的矢量,您可以將值複製到淺拷貝。但是,您可以通過使用vector-copy

+0

一個向量和一個列表有什麼區別? – naomik

+0

@naomik矢量通常被稱爲其他語言中的數組,並且通常是固定長度的O(1)訪問,而列表是單向鏈接列表。 Common Lisp有矢量和數組,不同之處在於數組可以是動態大小和多維的。 – Sylwester

+0

嗯海!這就說得通了。謝謝^^ – naomik

1

在程序的第二行中,寫入(vector vec)。這是什麼評估?