問題
我有一個分配給寫球拍函數:球拍數據處理問題:向量指針是空
需要起點,目的地(既作爲3個字符的機場代碼), 和航班數據列表,並返回從起點到終點的所有航班的遲到統計信息的列表 ,並將單元格(來源目的地)作爲第一個元素。
數據必須格式化爲六個比例,比例至少爲1,15,30,60,120和180分鐘的航班比例。
在我的代碼中,我寫了一個尾先遞歸函數,每當找到匹配的飛行數據片段時,它就會在一個長度爲6的矢量中增加一個值。然後,一旦遞歸檢查數據列表,就會返回比例列表。
我收到以下錯誤,表明part
在達到增量代碼時無效。 part
不應該指向整個函數中生成的向量嗎?
錯誤
vector-ref: contract violation
expected: vector?
given: #<void>
argument position: 1st
other arguments...: 3
代碼
(require "ontime.rkt")
(define (ontime-stats-by-route orig dest data)
(define (aux orig dest data part)
(if (null? data)
(let ([sum (foldl + 0 (vector->list part))])
(list (cons orig dest)
(/ (vector-ref part 0) sum)
(/ (vector-ref part 1) sum)
(/ (vector-ref part 2) sum)
(/ (vector-ref part 3) sum)
(/ (vector-ref part 4) sum)
(/ (vector-ref part 5) sum)))
(if (and
(eq? orig (car (car (cdr (car data)))))
(eq? dest (car (cdr (car (cdr (car data)))))))
(let ([late (car (cdr (cdr (cdr (car data)))))])
(cond
[(>= late 180) (aux orig dest (cdr data)
(vector-set! part 5 (vector-ref part 5)))]
[(>= late 120) (aux orig dest (cdr data)
(vector-set! part 4 (vector-ref part 4)))]
[(>= late 60) (aux orig dest (cdr data)
(vector-set! part 3 (vector-ref part 3)))]
[(>= late 30) (aux orig dest (cdr data)
(vector-set! part 2 (vector-ref part 2)))]
[(>= late 15) (aux orig dest (cdr data)
(vector-set! part 1 (vector-ref part 1)))]
[(>= late 1) (aux orig dest (cdr data)
(vector-set! part 0 (vector-ref part 0)))]
[else (aux orig dest (cdr data) part)]))
(aux orig dest (cdr data) part))))
(let ([count (make-vector 6 0)])
(aux orig dest data count)))
(ontime-stats-by-route "BWI" "BDL" ontime)
在球拍'#'不是空指針,它通常不以任何方式用於可爲空的值。它通常來自程序,不會返回任何有用的值,通常是因爲它們有副作用。 –