2011-11-07 103 views
0

我是一個初學者的方案,我有點困惑的邏輯:如果我比較列表中的第一個元素和第二個元素,如何在最後一個元素上停下來? [簡單方案q]

可以說我想從列表中的最大數字,我不得不使用(第一ns)和(第二NS)

所以表達式將包括:

(define (bigger ns) 
     (cond 
      ..... 
       ((> (first ns)(second ns) (cons.....(bigger (rest ns)))...)) 

如果我總是比較第二個元素的第一個元素在列表中,一旦到達列表的最後一個元素,也將不再是第二個元素可用,這會引發錯誤。我最後一次如何阻止它?畢竟,沒有最後的?功能使用。

回答

0

(null? (rest ns)),你在最後一個元素,最大值是當前元素(first ns),你可以停止遞歸。

1

列表方案是如何工作的,所以它可能會幫助你的困惑更普遍的快速回顧:

是兩件事情,一個firstrest。通常它的寫有這樣的點:(1 . 2)

一個列表要麼是空列表,也稱爲null,或者是一對,其第二件事(其rest)是一個列表。

所以,如果你有一個數字的列表,像這樣:(1 2 3 4 5)召回,它實際上是一個系列的嵌套對: (1 . (2 . (3 . (4 . (5 . null)))))

所以,如果你是遞歸下這串對,當你到了最後一個,你會知道這是結束,因爲restnull

相關問題