2017-12-26 17 views
-2

Scheme言語でコードを作成しようとしています。リストを入力して最初の要素が1回繰り返され、2番目の要素が2回繰り返されるリストの文字列表現を返したい時間および第三の要素はScheme言語で文字列リストを繰り返す

入力のような三回繰り返す=>(CDG) 出力私はすべての要素を複製してコードを書い=>(cddggg)

あります。ループを使用して、すべての要素を最初から最後まで1からn回繰り返す必要があります(nはリストのサイズです)。しかし、私は方法がわかりません。

(define repeat 
    (lambda (d) 
    (cond [(null? d) '()] 
      [(not (pair? (car d))) 
      (cons (car d) 
       (cons (car d) 
         (repeat (cdr d))))] 
      [else (cons (repeat (car d)) 
         (repeat (cdr d)))]))) 

       (repeat '(a b c d e)) => aa bb cc dd ee 


(define size 
    (lambda (n) 
     (if (null? n)    
      0     
      (+ 1 (size (cdr n)))))) 
(size '(A B C D)) => 4 
+0

出力は ''(c d d g g g) ''でなければならないということは、 ''(c d d g g g) 'の文字列表現なのですから? http://idownvotedbecau.se/nocode/ – Sylwester

+0

N番目の要素をN回繰り返すという「実際の」問題について、何を試しましたか?すべての要素を2回繰り返す代わりに。 –

答えて

1

これにはいくつかの異なる機能を設定する必要があります。

  • repeat

    は(あなたが説明するように)この(repeat '(c d g)) ;=> (c d d g g g)

のように最初の要素にn回、第二の要素n+1回などを繰り返しヘルパー(repeat-aux n lst)を使用していることを実施するための最良の方法を動作します。

あなたが定義することができることを考える:

(define (repeat lst) (repeat-aux 1 lst)) 

repeat-auxを実装するには、あなたがこの

(define (repeat-aux n lst) 
    (if (null? lst) 
     '() 
     ... (repeat-aux (+ n 1) (cdr lst) ...)) 

私はちょうど機能のスケッチや概要を与えているような再帰パターンを使用することができますが全部ではありません。あなた自身でそれに取り組むことができるように。


繰り返し-AUXを実装するために、私はまた、このように動作します助け機能(replicate n elt tail)を作る推薦:

(replicate 3 'o '(u v w)) ;=> (o o o u v w) 

私は、単純なヘルパー関数に分解するという考えがそれになり願っていますより簡単に。あなたは立ち往生して立ち往生したら尋ねてください。

関連する問題