我一直得到输出为:
Exam Avg: 50.#!unspecific
[每当我尝试按计划打印程序时。我正在使用两个函数print和secprint,我认为可能正在发生错误:
(define (print cnt List)
(if (= cnt 1) (printEmp (car List))
(secprint cnt List )))
(define (secprint cnt List)
(printEmp (car List))
(newline)
(print (- cnt 1) (cdr List)))
(define (printEmp person )
(define empl (split person))
(cond ((string=? "pf" (car empl))
(display (car (cdr empl))) (display " ") (display (car (cdr (cdr empl))))
(newline)
(display "Exam Avg: ") (display (avg person))
(newline)))
(cond ((string=? "std" (car empl))
(display (car (cdr empl))) (display " ") (display (car (cdr (cdr empl))))
(newline)
(display "Exam Avg: ") (display (avg2 person))
(newline))))
有人可以帮忙吗?我是该计划的新手,似乎无法弄清楚我要去哪里。
编辑:其他可能有用的代码。
(define (start str );(filename)
(define read (filelines str))
(define cnt (listlen read))
(print cnt read)
)
(define (avg List)
(cond ((string=? "std" (car (split List)))
(display (/ (examTotals List) 3.0)))
(else 0))
)
(define (examTotals str)
(cond ((string=? "std" (car (split str)))
(+( + (exam1 str) (exam2 str)) (exam3 str)))
(else 0))
)
(define (exam1 str)
(string->number (car (cdr (cdr (cdr (split str))))))
)
(define (exam2 str)
(string->number (car (cdr (cdr (cdr (cdr (split str)))))))
)
(define (exam3 str)
(string->number (car (cdr (cdr (cdr (cdr (cdr (split str))))))))
)
我正在读取的输入文件的格式如下:
pf Jeremy Greer 80 50 65
std Maria Garcia 70 90 20
std Floyd Jenkins 100 100 90
pf Carlton West 70 70 10
display
过程写入输出,然后返回未指定的值。您将display
用于打印数据的副作用,而不是其返回值。
(define (avg List)
(cond ((string=? "std" (car (split List)))
(display (/ (examTotals List) 3.0)))
(else 0)))
avg
过程返回最后计算的表达式的值;当display
分支求值时,未指定的值将返回给调用方。但是,调用方printEmp
不需要avg
来显示其结果,它仅需要一个返回值,然后该值将由printEmp
过程打印出来。]
通过从display
过程中删除avg
来解决:
(define (avg List)
(cond ((string=? "std" (car (split List)))
(/ (examTotals List) 3.0))
(else 0)))