Изучу схему / ракетку, так что дайте мне немного свободы.
В настоящее время пытаюсь найти максимальное значение при задании списка без использования встроенной функции max ().
Текущий код:
#lang racket
(provide max-num)
(define (max-num lst)
(define (helper lst max)
(displayln lst)
(displayln max)
(displayln " ")
(when (null? max) ; first run
(helper (cdr lst) (car lst)))
(if (null? lst)
max ; then end
(if (> (car lst) max) ; else compare
(helper (cdr lst) (car lst)) ; then update max
(helper (cdr lst) max)))) ; else keep max
(if (null? lst)
#f ; then Error
(helper lst '())) ; else run helper
)
(max-num '())
(max-num '(1 5 2 4 3))
Вывод через DrRacket:
Насколько я могу судить, выходы displayln говорят мне, что я на правильном пути. Тем не менее, в конечном итоге нарушение договора заканчивается реальным? ошибка вместо возврата максимального значения.
Я предполагаю, что (if (null? Lst)) не хочет возвращать «max» в конце и вместо этого подталкивает к ветке else, несмотря на то, что список пуст. Я осмотрелся и отладил около часа, но безрезультатно. Любая помощь будет принята с благодарностью.