2016-09-17 13 views
2

小さなリストのリストを取得し、各リストの最初の要素のコピーを各リストの末尾に追加します。それが意味をなさない場合は、例を挙げておきます:リストに再帰的に追加するとnullが返される

f({(0,0,1)、(1,0,0)、(1,0,1,0)、(0,1,0)、.. 。})= {(0,0,1,0)、(1,0,0,1)、(0,1,0,0)、...}

これは私が持っているものですこれまでのところ、

(define (add-end n set) 
    (cond 
    ((null? set) '()) 
    (cons (append (first set) (first (first set))) 
      (add-end n (rest set))))) 

これは私にヌルの結果を与え続け、私は正確にその理由を知りません。

答えて

1

式のelse部分を忘れてしまったためコードが失敗し、appendingのようにリストの最後に1つの要素が間違っています。これは、問題を修正する必要があります。私たちは既存の手順を使用している場合

(define (add-end set) 
    (cond ((null? set) 
     '()) 
     (else 
     (cons (append (first set) (list (first (first set)))) 
       (add-end (rest set)))))) 

しかし、待って、簡単な解決策があります:

(define (add-end set) 
    (map (lambda (lst) 
     (append lst (list (first lst)))) 
     set)) 

説明:

  • 我々はnは必要ありませんが - リストを処理するために、あらかじめその長さを知る必要はほとんどありません。
  • 入力リストの各要素をc新しい出力リストをreate、mapを使用すると、これらのケース
  • に移動するための方法は、今では適切なリストを構築するには、各リストの最初の要素
  • をINGのappendの単純な問題だが、appendは、それは両方のそのの必要があることを覚えて予想通り引数は(list (first lst))

いずれかの方法でビットを説明してリスト、ある、それが動作します:

(add-end '((0 0 1) (1 0 0) (0 1 0))) 
=> '((0 0 1 0) (1 0 0 1) (0 1 0 0)) 
+0

私は今参照してください。以前私に何が与えられたのですか? – CompNoob

+0

@CompNoobあなたが 'else'を忘れて失敗していました。この状態の「コン」部分は効果がなかった。 –

関連する問題