2016-03-28 73 views
-2

我知道如何獲得第一n元素的列表,獲取在DrRacket列表中最後n個元素,而無需列表裁判

(define (countup n ls) 
    (cond 
    [(zero? n) '()] 
    [else (cons (first ls) (countup (sub1 n) (rest ls)))])) 

,但我怎麼能爲最後做這樣的事情n列表中的元素(不使用list-ref)

如果我打電話(countup 3 '(a b c d e)),我得到(list a b c)。我需要能夠輸入(counter 3 '(a b c d e))並獲得(list c d e)

如果數字n大於列表長度,我需要錯誤消息。

回答

2

只需使用內置take-right程序,它正是你需要:

(take-right '(a b c d e) 3) 
=> '(c d e) 

或者你可以從頭開始使用原始程序實現它,:

(define (counter n lst) 
    (define (move n lst) 
    (if (zero? n) 
     lst 
     (move (sub1 n) (rest lst)))) 
    (define (trim-left lst rst) 
    (if (empty? rst) 
     lst 
     (trim-left (rest lst) (rest rst)))) 
    (trim-left lst (move n lst))) 

它也可以作爲預計:

(counter 3 '(a b c d e)) 
=> '(c d e) 
+0

我需要能夠做到這一點而不使用take-right – KrissyMichaelsson

+0

altho I謝謝你的幫助,我不能使用trim,take,move或list-ref。 – KrissyMichaelsson

+0

我不使用任何這些,我只是定義了兩個名爲'move'和'trim-left'的幫助程序。無需使用額外的助手即可,無法輕鬆解決此問題。 –

相關問題