2016-05-14 10 views
1

Ich möchte eine Funktion machen, um das N-te erste Element einer Liste zu bekommen.Wie bekomme ich N erstes Element einer Liste

Zum Beispiel:

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

Rückkehr: (abc)

ich gemacht, dass:

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

Aber es funktioniert nicht, ich glaube, ich let verwenden sollte, aber ich Ich weiß nicht wie.

Danke.

Antwort

3

Es ist viel einfacher, erinnern Sie sich - Sie sollten versuchen, funktional zu denken. In Lisp wird unter Verwendung von set! (oder anderen Operationen, die den Status mutieren) abgeraten, eine rekursive Lösung ist der natürliche Ansatz. Unter der Annahme, dass die Liste genügend Elemente hat, sollte dies funktionieren:

(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

Wir durchlaufen nur die Liste, bis die erforderliche Anzahl von Elementen abgeschlossen ist, erstellen eine _new_ Liste, wie wir gehen. Dieses Muster ist so üblich, dass Sie es als Vorlage verwenden können, um viele ähnliche Probleme zu lösen, die eine Liste konsumieren und eine Liste zurückgeben. –