我创建了这个超级简单的程序,从控制台获取列表并返回平均值。无论出于什么原因,我总是收到一条错误消息,说列表的最后一个数字不是数字。这是我的代码:
(define getline (lambda ()
(read-line (current-input-port))
)
)
(define getlist (lambda ()
(let ((input (getline)))
(if (not (equal? input "end"))
(cons input (getlist))
' ()
)
)
)
)
(define x (getlist))
(define (sum x)
(if (null? x)
0
(+ (car x) (sum (cdr x)))))
(define (average x)
(/ (sum x) (length x)))
(display (average x) (current-output-port))
您没有提到您使用的是什么方案实现,但read-line
函数通常会返回一个字符串。你必须先将这些字符串转换为数字才能添加它们:
(define x (map string->number (getlist)))
或者
(define (sum x)
(if (null? x)
0
(+ (string->number (car x)) (sum (cdr x)))))
或者其他类似的东西。