我是计划的新手。我正在尝试使用方案查找列表的最大值和最小值。使用“循环”我能够得到答案。现在我正在尝试不同的方式来实现同样的事情。我做了一些改变,出于某种原因,我找不到我做错了什么。如何使用方案编写计算整数列表的最大值和最小值的函数
;non working version
(define (min-max list1)
(let (ls list1) (max (car list1)) (min(car list1))
(cond
((null? ls)
(list "max: " max "min: " min))
((> (car ls) max)
(let ((car ls) max))
(min-max (cdr ls)))
((< (car ls) min)
(let ((car ls) min))
(min-max (cdr ls)))
(else
(min-max (cdr ls))))))
(define list1(list 1 2 3 4))
(display list1)
(newline)
(min-max list1)
;working version
(define (min list1)
(let loop((ls list1) (max (car list1)) (min(car list1)))
(cond
((null? ls)
(list "max: " max "min: " min))
((> (car ls) max)
(loop (cdr ls)(car ls) min))
((< (car ls) min)
(loop (cdr ls) max (car ls)))
(else
(loop (cdr ls) max min)))))
(define list1(list 1 2 3 4))
(display list1)
(newline)
(min list1)
这段代码有太多的错误,我不知道从哪里开始。错误的语法,括号错误,不正确的函数调用,不存在的过程......我建议你先阅读一本关于Scheme的良好教科书,对不起。 –
感谢您的回复。我试图从在线教程学习计划。我在上面添加了一个工作版本。我试图找到在条件语句之后是否有任何方式运行多个表达式。如果你能指导我使用任何合适的材料,请告诉我。谢谢你的时间。 –
请注意,在工作版本中有一个名为'let'(您称之为'loop')。它会创建一个包含变量名称的过程,以便在浏览列表时可以保持最小值。在你试图做min和max时,你需要以当前结果作为变量以相同的方式。 – Sylwester