2015-08-28 119 views
4

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

回答

7

調試程序一個非常有用的工具是計劃步進。 步進器將向您展示如何一次對程序進行一步評估。 步進器只適用於用教學語言編寫的程序,所以我已經改變了你的程序(我沒有改變邏輯)。

在DrRacket中打開一個新文件。粘貼下面的程序(包括最後的例子)。在「語言」菜單中選擇「選擇語言...」項目。然後選擇「初學者」的語言。 最後點擊「Step」按鈕(圖標旁邊帶有複選標記+鏡子)。

(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)) 

單擊通過評估的方式,直到您發現錯誤。

+0

謝謝!我不知道這件事。於是我開始瀏覽代碼,並且遇到了一個問題,它是「期待一對」for> =操作,但只給出一個。怎麼來的?我有兩個表情。它是一個括號問題嗎? – aurora91

+0

沒關係,我明白了!我不得不切換cdr和汽車進行第二個參數。非常感謝你的「初學者」語言!它幫助了一噸! – aurora91

+0

yay步進!謝謝Jens。 –

2

>= (car lst) cdr(car lst)應以括號像[(>= (car lst) cdr(car lst)) (max-num (list (car lst) (car(cdr lst))))]

+0

謝謝你的幫助!這些括號將成爲我的死亡...現在它不喜歡我> =表達式評估,但這是我猜想的一個不同的問題。 – aurora91