Scheme Racket计算List无限循环中的Max元素

aur*_*a91 4 scheme racket

我正在编写我在Scheme中的第一个程序,在解决了一堆语法问题之后,我遇到了无限循环.我只是试图检索列表中的最大数字并将其打印到控制台.这是我到目前为止所拥有的:

(define (max-num lst)
  (cond [(= 0 (length lst)) (displayln "Your list is empty!")]
    [(= 1 (length lst)) (displayln (car lst))]
      ;start comparing recursively
    [>= (car lst) cdr(car lst) (max-num (list (car lst) (car(cdr lst))))]
          (else (max-num(cdr lst))))
    )
          )
(max-num '(1 2 3 4 5))
(max-num '(-5 -3 -2 -13))
Run Code Online (Sandbox Code Playgroud)

soe*_*ard 7

调试程序的一个非常有用的工具是程序步进器.步进器将向您显示如何一步一步地评估程序.步进器仅适用于用教学语言编写的程序,所以我稍微改变了你的程序(我没有改变逻辑).

在DrRacket中打开一个新文件.粘贴下面的程序(包括最后的例子).选择"语言"菜单中的"选择语言..."项.然后选择"初学者"语言.最后点击"Step"按钮(图标旁边带有复选标记+后视镜).

(define (max-num lst)
  (cond
    [(= 0 (length lst))              "Your list is empty!"]
    [(= 1 (length lst))              (car lst)]
    [(>= (car lst) (cdr (car lst)))  (max-num (list (car lst) (car(cdr lst))))]
    [else                            (max-num(cdr lst))]))

(max-num (list 1 2 3 4 5))
(max-num (list -5 -3 -2 -13))
Run Code Online (Sandbox Code Playgroud)

单击您的评估方式,直到发现错误.