Racket Don';I don’我不知道如何解决这个错误;车辆:预计违反合同:对?给定:';()";
我试图得到一个包含以下n个元素的平均值的列表。我正在读一个有7列的csv文件,我只是使用第6列的数值来获得平均值。 这是密码Racket Don';I don’我不知道如何解决这个错误;车辆:预计违反合同:对?给定:';()";,racket,Racket,我试图得到一个包含以下n个元素的平均值的列表。我正在读一个有7列的csv文件,我只是使用第6列的数值来获得平均值。 这是密码 ;Function that returns a list containing the values of the desired column (define (get-column col) (let loop ([file (cdr(all-rows csv-path read-csv))] [result empty]) (if (
;Function that returns a list containing the values of the desired column
(define (get-column col)
(let loop
([file (cdr(all-rows csv-path read-csv))]
[result empty])
(if (empty? file)
result
(loop (cdr file)
(cond
[(equal? col 1) (append result (list (caar file)))]
[(equal? col 2) (append result (list (string->number(cadar file))))]
[(equal? col 3) (append result (list (string->number(caddar file))))]
[(equal? col 4) (append result (list (string->number(car (cdddar file)))))]
[(equal? col 5) (append result (list (string->number(cadr (cdddar file)))))]
[(equal? col 6) (append result (list (string->number(caddr (cdddar file)))))]
[(equal? col 7) (append result (list (string->number(car (cdddr (cdddar file))))))]
)))))
(define (suma-SMA col n)
(let loop
([n n]
[res 0]
[col col])
(if (zero? n)
res
(loop (sub1 n) (+ res (car col)) (cdr col)))))
(define (get-SMA days)
(let loop
([col (get-column 6)]
[result empty])
(if (empty? col)
result
(loop (cdr col)(append result (list (suma-SMA col days)))))))
这里有一个函数,它可以实现您在注释中要求的功能,例如,给定
(1234)
它会生成((1+2)/2(2+3)/2(3+4)/2)
我仍然有点困惑,因为即使是get-SMA
和suma-SMA
的组合也没有这样做。完全不清楚days
变量在做什么,正如您可以看到的,我在上面的代码中不需要它
因此,我可能误解了您的意图,但上面的函数实现了您实际要求的功能,因此希望它会有所帮助。以下是我发现对我的问题有用的答案
(define (sum list n)
(cond
((null? list)
'()) ;; error?
((null? (cdr list))
'())
(else
(cons (suma-SMA list n) (sum (cdr list) n)))))
由于
n
的长度大于col
的长度,因此出现错误。不清楚您为什么需要在suma SMA
中使用n
,为什么不在到达列表末尾时停止求和?我正在尝试添加一个列表,例如“(1,2,3,4),解决方案应该是“((1+2)/2,(2+3)/2,(3+4)/4)我有点困惑,您的suma SMA
函数没有这样做。除此之外,suma SMA
返回一个整数,而不是另一个列表。问题在于get SMA
中有一个我想要迭代的地方,直到我的col
变为空。这个函数不是我需要的,但非常有用,在这个函数中,你可以得到当前值和下一个的平均值(/(+(汽车列表)(cadr列表))2)
但我所说的是关于得到当前值和接下来n个值的平均值。例如,如果天是5天,它应该是(/(+(汽车列表)(cadr列表)(cdar列表)(cddar列表)(cdddar列表))5)
。但我不希望这个总和是静态的。如果我没有很好地解释我的问题,很抱歉。我已经更改了我的suma SMA(定义(suma SMA col n)(让循环([cont n][res 0][col col])(如果(zero?cont)(/res n)(循环(sub1 cont)(+res(car col))(cdr col)))
我尝试将它添加到您的代码中,类似这样的内容(define(sum list n)(cond((null?list);;error?((null?(cdr list)))))(else(cons(cons)(suma SMA(get column 6)n)(sum(cdr list)n())
(define (sum list n)
(cond
((null? list)
'()) ;; error?
((null? (cdr list))
'())
(else
(cons (suma-SMA list n) (sum (cdr list) n)))))