2017-10-02 10 views
-1

私は値のリストを持っていて、そのリストから最初のxの値をとり、(リスト(最初のx値のリスト)(次のx値のリスト)などを作成してこのリストが空になるまでします。例えばリストをBSLの複数の部分に分割できますか?

、このリストを与える:事前に(list (list a" "b" "c") (list "d" "e" "f") (list "g" "h" "t"))

感謝:)

答えて

1

リストのデータ型が何であるかを覚えておいてください:この(list "a" "b" "c" "d" "e" "f" "g" "h" "t") リターンを。あなたのテンプレートは、この構造を反映すべきである、ということを考えると

;; A IntegerList is one of: 
;; - '() 
;; - (cons Integer IntegerList) 

:あなたのクラスは、おそらくのようなものをやっています。我々は1つの整数のリストに整数のリストをオンにしたいところ私は(基本ケースを解決する

まず、私のように1Listデータ型を定義します。

;; a 1List is: 
;; - (cons Integer '()) 

次にための目的の声明と署名関数は次のようになります。

;; Takes a list of integers and returns a list of 1Lists of the same integers 
;; IntegerList -> 1List 
(define (make-1list lst) 
    ...) 

オーケークール今、私たちに必要なテストケース:

(check-expect (make-1list (list 1 2 3)) (list (list 1) (list 2) (list 3))) 
(check-expect (make-1list (list)) (list)) 
(check-expect (make-1list (list 42)) (list (list 42))) 

最後に、私は私のテンプレートを作ることができます。最後に

(define (make-1list lst) 
    (cond [(null? lst) ...] 
      [else  ... (first lst) ... (rest lst) ...])) 

(。それは時々あなたが必要なテスト何を指針とするために、最初のテンプレートの一部を作るために理にかなっていることに注意してください)

、我々はできます

(define (make-1list lst) 
    (cond [(null? lst) '()] 
     [else (cons (list (first lst)) (make-1list (rest lst)))])) 

最終的にはテストでもありますので、すべての動作を確認するためにテストする必要があります。

1Listの代わりに3Listを作りたいので、このレシピに従って問題を解決する方法がわかりますか?

  1. データ定義を書き留めます。
  2. 目的のステートメントと署名を作成します。
  3. 例を作成してください。
  4. テンプレートを作成します。
  5. 実際の関数を記述します。
  6. 既存のサンプルをテストに変換します。

このパターンに従うと、問題を小さなステップに分割するのに役立ちます。がんばろう。

0

このタスクを達成するためのより良い方法は、アキュムレータ&再帰を使用することです。

関連する問題