我刚刚在使用 Scheme 的过程中遇到了另一个障碍。可以肯定地说,我的桌子已经受够了我的脑袋……我已经编写了一个函数来查找班级作业列表中的最小和最大数字。逻辑是合理的(我认为是......)并且一切正常,但是,只有第一个函数调用的值是从(定义(迭代器 aList minNum maxNum))返回的。我在调试器中注意到的是,在每次递归/函数调用之后,我看到(使用 DrRacket)该函数调用被推入堆栈。一旦递归最后一次发生并且代码跳转到 (list minNum maxNum) 的返回,它不会返回它应该返回的值,因为我可以看到值是正确的,而是看到函数调用从堆栈中出来一个接一个,直到它到达第一个。因此,将返回列表中前两个值的初始值。我知道堆栈是 FIFO,但是,我什至没有尝试将任何东西推入堆栈。从理论上讲,我只想再次调用该函数并继续传递值……对此的任何指导将不胜感激。
(define (findMinMax aList)
(define (iterator aList minNum maxNum)
(when(not(null? aList))
(cond
((> minNum (car aList))
(set! minNum (car aList)))
((< maxNum (car aList))
(set! maxNum (car aList))))
(iterator (cdr aList) minNum maxNum))
(list minNum maxNum))
(cond ; setting the first two atoms in a list appropriately to the min and max variables.
((< (car aList) (car(cdr aList)))
(iterator (cdr (cdr aList)) (car aList) (car(cdr aList))))
((> (car aList) (car(cdr aList)))
(iterator (cdr (cdr aList)) (car(cdr aList)) (car aList)))
(else
(iterator (cdr (cdr aList)) (car aList) (car(cdr aList))))))