Scheme 在列表无限循环中计算最大元素的方案
我正在用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
(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))