我剛剛在沿着我的計劃的旅程沿途的另一個顛簸。可以肯定地說,我的桌子已經讓我感到頭痛不已......我已經寫了一個函數,可以在班級作業的列表中找到最小和最大數字。邏輯是健全的(我認爲是這樣),並且一切正常,但是,只有第一個函數調用的值從(define(iterator aList minNum maxNum))返回。我在調試器中注意到,在每次遞歸/函數調用後,我都會看到(使用DrRacket)函數調用被推送到堆棧。一旦遞歸發生在最後一次,並且代碼跳轉到(list minNum maxNum)的返回值,它不會返回它應該的值,因爲我可以看到這些值是正確的,而是我看到函數調用從堆棧中移出一個接一個,直到達到第一個。因此,將返回將成爲列表的前兩個值的初始值。我知道堆棧是FIFO,但是,我甚至沒有試圖將任何東西推入堆棧。理論上我只是想再次調用這個函數,並保持傳遞值......任何有關這方面的指導都將非常感激。Lisp遞歸問題與堆棧
(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))))))
也陰影全局函數的變量(一般禁忌)和變量的名稱列表中的其他變量。 (如果你不知道發生了什麼,會感到困惑)。 – WorBlux
謝謝。我認爲這是一個優勢;我喜歡Scheme的嚴格詞彙範圍。乾杯! – GoZoner