【发布时间】:2018-06-07 23:22:18
【问题描述】:
学习一些计划/球拍,所以给我一些余地。
当前在不使用内置 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 分支。我已经环顾四周并调试了大约一个小时,但无济于事。任何帮助将不胜感激。
【问题讨论】:
标签: scheme max racket contract