Scheme 在列表无限循环中计算最大元素的方案

Scheme 在列表无限循环中计算最大元素的方案,scheme,racket,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

我正在用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))

=(car-lst)cdr(car-lst)
应该放在括号中,比如
[(>=(car-lst)cdr(car-lst))(max-num(list(car-lst)(car(cdr-lst)))]

调试程序的一个非常有用的工具是程序步进器。 步进器将向您展示如何一步一步地评估程序。 stepper只适用于用教学语言编写的程序,因此我对您的程序做了一些更改(我没有更改逻辑)

在DrRacket中打开一个新文件。粘贴下面的程序(包括末尾的示例)。在“语言”菜单中选择“选择语言…”项。然后选择“初学者”语言。 最后单击“步骤”按钮(位于带有复选标记+观察镜的图标旁边)


单击评估,直到发现错误。

哇,谢谢!我对此一无所知。因此,我开始逐步浏览代码,遇到了一个问题,即>=操作“需要一对”,但只给出一对。怎么会?我有两种表达方式。这是一个括号问题吗?没关系,我明白了!在第二次辩论中,我不得不调换cdr和汽车。非常感谢你的“初学者”语言!它帮了大忙!耶,踏步者!谢谢Jens。我们为什么不为
#准备一个步进器呢!球拍
?@JohnClements这个问题是给你的(见上文)。谢谢你的帮助!这些括号将是我的死亡。。。现在它不喜欢我的>=表达式计算,但我想这是另一个问题。
(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))