Я не обнаружил логическую ошибку, поэтому переписал ее рекурсивным способом more
Важно идентифицировать рекурсивные части, прежде чем писать нашу функцию.
multi-max
может быть рекурсивно определен как multi-max = max(multi-max(car), multi-max(cdr))
(define (multi-max array)
(cond ((pair? array) (max (multi-max (car array)) (multi-max (cdr array))))
((number? array) array)
(else 0)))
(multi-max '(1 9 83 9 (332 (334) (2 3 4224))))
теперь выводит 4224
.
Редактировать: Хорошо, думаю, я нашел ошибку:
...
((pair? (car array))
(multi-max (car array)))
(else
(multi-max (cdr array))))
...
Код игнорирует (cdr array)
в (pair? )
части и (car array)
в части (else )
Должно быть:
(else (max (multi-max (car array)) (multi-max (cdr array))))
(*) обратите внимание, что (pair? )
удалено.