2016-05-14 24 views
1

リストのN番目の最初の要素を取得する関数を作成します。例えばリストの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)))))) 

しかし、それは動作しません、私はLETを使うべきだと思うけど方法を知らない。

ありがとうございました。

答えて

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_リストを構築します。このパターンは非常に一般的なので、リストを消費してリストを返す多くの同様の問題を解決するためのテンプレートとして使用できます。 –

関連する問題