#! unspecifi c ошибка при печати значений в схеме - PullRequest
2 голосов
/ 26 апреля 2020

Я получаю вывод:

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

Could someone please help with this? I am new to scheme and can't seem to figure out where I am going wrong.

Edit: Other code that might be useful.


(define (avg List)
  (cond ((string=? "std" (car (split List)))
  (display (/ (examTotals List) 3.0)))
  (else 0))
)



1 Ответ

1 голос
/ 26 апреля 2020

Процедура 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)))
...