2016-05-14 53 views
1

我想創建一個函數來獲取列表的第N個第一個元素。如何獲取列表的第一個元素

例如:

>>(firsts 3 '(a b c d e)) 

回報:(ABC)

我做了:

(define (firsts number lst) 
    (let ((maliste '())) 
     (if (equal? 0 number) 
      maliste 
      (and (set! maliste (cons (car lst) maliste)) (firsts (- number 1) (cdr lst)))))) 

但它不工作,我想我應該用一讓,但我不知道如何。

謝謝。

回答

3

這很簡單,記住 - 你應該嘗試功能性思考。在Lisp中,使用set!(或者其他改變狀態的操作)是不鼓勵的,遞歸解決方案是自然的方法。假設列表中有足夠的元素,這應該工作:

(define (firsts number lst) 
    ; as an exercise: add an extra condition for handling the 
    ; case when the list is empty before the number is zero 
    (if (equal? 0 number) 
     '() 
     (cons (car lst) 
      (firsts (- number 1) (cdr lst))))) 
+1

我們只是遍歷列表,直到完成所需數量的元素,隨着我們去建立_new_列表。這種模式非常常見,您可以將其用作模板來解決許多類似的消耗列表並返回列表的問題。 –

相關問題