Racket Don';I don’我不知道如何解决这个错误;车辆:预计违反合同:对?给定:';()";

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 (

我试图得到一个包含以下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 (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)))))