方案程序,以获得平均不识别最后一个数字



我创建了这个超级简单的程序,从控制台获取列表并返回平均值。无论出于什么原因,我总是收到一条错误消息,说列表的最后一个数字不是数字。这是我的代码:

(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)))))

或者其他类似的东西。

最新更新